算法--常用排序和查找

 

常见算法中的排序和查找:

  1. 选择排序(指定一个和其他数比较)

    // 选择排序(指定一个和其他数比较)
    for(int i=0;i<length-1;i++){
        for(int j=i+1;j<length;j++){
            if(arr[i]>arr[j]){
                int temp = arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }

  2. 冒泡排序(相邻两个数比较)

    // 冒泡排序(相邻两个数比较)
    for(int i=0;i<length-1;i++){
        for (int j=0;j<length-1-i;j++) {
            if(arr[j]>arr[j+1]){
                int temp = arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }

 

  3. 插入排序(指定一个数和他左边的数依次往左比较,直到不满足条件为止)

//插入排序(指定一个数和他左边的数依次往左比较,直到不满足条件为止)
    //方法一:
    for(int i=0;i<length;i++){
        for(int j=i;j-1>=0 && arr[j-1]>arr[j];j--){        
                int trmp = arr[j];
                arr[j]=arr[j-1];
                arr[j-1]=temp;            
        }
    }
    
    //方法二:
    for(int i=0;i<length;i++){
        int e = arr[i];
        int j;
        for(j=i;j-1>=0 && arr[j-1]>e;j--){        
                arr[j]=arr[j-1];        
        }
        arr[j]=e;
    }

  4. 二分查找(折半查找) 

//二分查找(折半查找)    
    int key=要找的数;
    int min=0;
    int max=length-1;
    int mid=(min+max)/2;
    while(arr[mid]!=key){
        if(arr[mid]>key){
            max=mid-1;
        }
        if(arr[mid]<key){
            min=mid+1;
        }
        mid=(min+max)/2;
        if(max<min){
            mid=-1;
            break;
        }    
    }
    System.out.printf(mid);
 
原文地址:https://www.cnblogs.com/huaxiansheng/p/11031367.html