排序之一:快速排序

2016-08-03  本文已影响9人  筱南独舞
private static void quickSort(int arr[], int low, int high) {
    int l = low, h = high, povit = arr[low], tmp;
    while (l < h) {
        while (l < h && arr[h] >= povit) h--;
        if (l < h) {
            tmp = arr[h];
            arr[h] = arr[l];
            arr[l] = tmp;
            l++;
        }
        while (l < h && arr[l] <= povit) l++;
        if (l < h) {
            tmp = arr[h];
            arr[h] = arr[l];
            arr[l] = tmp;
            h--;
        }
    }
    if (l > low) quickSort(arr, low, l - 1);
    if (h < high) quickSort(arr, l + 1, high);
}

运行效果:


快速排序运行效果.png
  1. 在最快及平均情况下,时间复杂度为O(nlog底数为2 的n)。最坏情况就是每次挑中的中间值不是最大就是最小,起时间复杂度为O(n²);
  2. 不是稳定排序法;
  3. 在最差的情况下,空间复杂度为O(n),而最佳情况为O(log以2为底的n);

其他排序:插入排序选择排序冒泡排序希尔排序基数排序

上一篇 下一篇

猜你喜欢

热点阅读