选择排序

67 阅读1分钟

简单选择排序

public void sort(int[] a) {
    for (int i = 0; i < a.length - 1; i++) {
        int min = i;
        for (int j = i; j < a.length; j++) {
            if (a[j] < a[min]) {
                min = j;
            }
        }
        if (min != i) {
            int temp = a[min];
            a[min] = a[i];
            a[i] = temp;
        }
    }
}

一次选出最大和最小两个数的选择排序

类似于快速排序的思路,区别是选择排序要找到这个待交换的元素。

public void sort(int[] a) {
    int left = 0;
    int right = a.length - 1;
    while (left < right) {
        int min = left;
        int max = right;
        for (int i = left; i <= right; i++) {
            if (a[i] < a[min]) {
                min = i;
            }
            if (a[i] > a[max]) {
                max = i;
            }
        }
        if (min != left) {
            int temp = a[min];
            a[min] = a[left];
            a[left] = temp;
        }
        if (max == left){
            max = min;
        }
        if (max != right) {
            int temp = a[max];
            a[max] = a[right];
            a[right] = temp;
        }
        left++;
        right--;
    }
}