数组常见排序与查找

冒泡排序:

  相邻元素两两比较,大的往后放。第一次排序完毕后,最大值就出现在最大索引出。此方法排序需要比较数组长度-1次

int[] arr = { 24, 65, 87, 57, 12,};
for (int i = 0; i < arr.length-1; i++) {
    for (int j = 0; j < arr.length-1-i; j++) {
        if(arr[j]>arr[j+1]){
            int temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
    }
}

选择排序:

  从0索引开始,一次和后面元素比较,小的往前放,第一次比较完毕后,最小值出现在最小索引处。

int[] arr = { 24, 65, 87, 57, 12,};
for (int i = 0; i < arr.length-1; i++) {
    for (int j = i+1; j < arr.length; j++) {
        if(arr[i]>arr[j]){
            int temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
        }
    }
}

二分查找(折半查找):

  前提:数组必须是有序的。

  思想:每次都计算中间的那个元素,比较元素与中间数的大小,就能减少一半的元素。

public static int getIndex(int[] arr,int value){
    int max = arr.length-1;
    int min = 0;
    int mid = (max+min)/2;
    while (arr[mid]!=value) {
        if (arr[mid]>value) {
            max = mid-1;
        }else if (arr[mid]<value) {
            min = mid+1;
        }
        if(min>max){
            return -1;
        }
        mid = (max+min)/2;
    }
    return mid;
}

 

posted @ 2017-09-13 18:37  txmwan  阅读(95)  评论(0)    收藏  举报