代码改变世界

java选择排序和二分查找

2009-08-23 12:44  BlueDream  阅读(994)  评论(0编辑  收藏  举报
package cn.com.exception;

public class Search
{

    
public static void main(String[] args)
    {
        
int[] arr = {1,3,4,56,34,22,35,87,23};
        Search.searchSort(arr);
        
for(int e: arr){
            System.out.print(e 
+ " ");
        }
        System.out.println();
        
int index = Search.binarySearch(arr, 22);
        System.out.println(index);
    }
    
    
// 选择排序(主要是用K记录位置避免多次交换)
    public static void searchSort(int[] a){
        
int temp, k;
        
for(int i = 0; i < a.length; i++){
            k 
= i;
            
for(int j = k + 1; j < a.length; j++){
                
if(a[j] < a[k]){
                    k 
= j;
                }
            }
            
if(k != i){
                temp 
= a[i];
                a[i] 
= a[k];
                a[k] 
= temp;
            }
        }    
    }
    
    
// 二分法查找(每次折半根据与中间位置的对比向左向右继续折半)
    public static int binarySearch(int[] a, int num){
        
if(a.length == 0return -1;
        
int startPos = 0;
        
int endPos = a.length - 1;
        
int m = (startPos + endPos) / 2;    
        
while(startPos <= endPos){
            
if(num == a[m]) return m;
            
if(num > a[m]){
                startPos 
= m + 1;
            }
            
if(num < a[m]){
                endPos 
= m - 1;
            }
            m 
= (startPos + endPos) / 2;            
        }
        
return m;        
    }
}