排序算法总结

203 阅读1分钟

1. 概述

整理常见排序算法

2. 公共方法

private int[] getArray() {
    int size = 16;
    int[] array = new int[size];
    Random random = new Random();

    for (int i=0; i<size; i++) {
            array[i] = random.nextInt(10);
    }

    print("before ", array);
    return array;
}

private void print(String prefix, int[] array) {
    System.out.print(prefix);
    for (Object obj : array) {
            System.out.print(obj + ", ");
    }
    System.out.println();
}

3. 冒泡排序

3.1 代码

public void test001(int[] array) {
    for (int i=0; i<array.length; i++) {
        int k = i;
        for (int j=i; j<array.length; j++) {
            if (array[j] < array[k]) {
                    k = j;
            }
        }

        int tmp = array[i];
        array[i] = array[k];
        array[k] = tmp;
    }
    print("after  ", array);
}

3.2 解释

从第一个元素开始,循环遍历该元素后边的其他元素,找到最小的一个,内层循环结束后,交换两个位置的元素。

4 快速排序

4.1 代码

public void test002(int[] array) {
    quick(array, 0, array.length - 1);
    print("after  ", array);
}

public void quick(int[] array, int s, int e) {
    if (s >= e) {
            return;
    }

    int start = s;
    int end = e;
    int mValue = array[s];

    while (s < e) {
        while (s < e) {
            if (array[e] < mValue) {
                    array[s] = array[e];
                    s ++;
                    break;
            }
            e --;
        }
        while (s < e) {
            if (array[s] > mValue) {
                    array[e] = array[s];
                    e --;
                    break;
            }
            s ++;
        }
    }

    quick(array, start, s);
    quick(array, s + 1, end);
}

4.2 解释

最开始以左边第一个元素为基准,从最右边找到第一个比基准元素小的移动到基准左边,从右边开始找到第一个比基准大的移动到右边。循环此流程,直到基准左边的都比右边的小。