常用算法

2017-06-28-常见的排序算法总结

2019-07-29  本文已影响0人  王元

1,简单选择排序

代码实现

 private static void simple(int[] arr) {
    final int len = arr == null ? 0 : arr.length;
    int position;
    for (int i = 0; i < len; i++) {
        position = i;
        int temp = arr[i];
        for (int j = i + 1; j < len; j++) {
            if(arr[j] < temp) {
                temp = arr[j];
                position = j;
            }
        }
        arr[position] = arr[i];
        arr[i] = temp;
    }
}

2,冒泡排序

代码实现

@Override
public void sort(int[] arr) {
    final int len = arr == null ? 0 : arr.length;
    for (int i= 0; i < len - 1; i++) {
        for (int j = i + 1; j < len; j++) {
            int temp;
            if(arr[i] > arr[j]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

3,快速排序

代码实现如下

@Override
public void sort(int[] arr) {
    if(arr == null)arr = this.arr;
    final int len = arr.length;
    quickSort(arr, 0 , len - 1);
    printArr(arr);
}


private void quickSort(int[] arr, int low, int high) {
    if(low < high) {
        int middle = getMiddle(arr, low, high);
        quickSort(arr, low, middle - 1);
        quickSort(arr, middle + 1, high);
    }
}

private int getMiddle(int[] arr, int low, int high) {
    int middle = 0;
    int temp = arr[low];//数组的第一个作为中轴
    while (low < high) {
        while (low < high && arr[high] >= temp) {
            high--;
        }
        arr[low] = arr[high];// //比中轴小的记录移到低端
        while (low < high && arr[low] <= temp) {
            low ++;
        }
        arr[high] = arr[low];//比中轴大的记录移到高端
    }
    arr[low] = temp;
    middle = low;//返回中轴的位置
    return middle;
}

4,直接插入排序

    @Override
    public void sort(int[] arr) {
        if (arr == null) arr = this.arr;
        final int len = arr.length;
        int temp = 0;
        for (int i = 1; i < len; i++) {
            int j = i -1;
            temp = arr[i];
            while (j >= 0 && temp < arr[j]) {//将大于temp的值整体后移一个单位
                arr[j + 1] = arr[j];
                j--;
            }
            arr[j + 1] = temp;
        }
        printArr(arr);
    }   
上一篇 下一篇

猜你喜欢

热点阅读