快速排序

在排序算法中,快速排序的速度首屈一指。其基本思想为:

  • 将待排序的序列的最左边的值设为基准值。
  • 将序列中比基准值小的数据放到基准值左边,比基准值大的数据放到基准值右边。
  • 将左右两部分数据,分别执行第一步和第二步。直到待排序的序列个数为1时停止递归。

代码实现:

public static void quickSort(int[] values, int left, int right){
    // 如果left不小于right,需要排序的序列只有一个元素,方法返回。
    if(left >= right){
        return;
    }

    // 设置最左边的元素为基准点:pivot
    int pivot = values[left];

    // 把需要排序的序列中比pivot大的数放到右边,比pivot小的数放到左边,pivot的下标位置为i
    int i = left;
    int j = right;

    while (j>i){
        while (values[j] >= pivot && j>i){
            j--;
        }
        while (values[i] <= pivot && j>i){
            i++;
        }
        if(j>i){
            int temp = values[i];
            values[i] = values[j];
            values[j]= temp;
        }
    }
    values[left] = values[i];
    values[i] = pivot;

    //对序列中i左边的元素快排
    quickSort(values,left,i-1);
    //对序列中i右边的元素快排
    quickSort(values,i+1,right);

}

快速排序的时间复杂度为O(NlogN) 。

展开阅读全文

没有更多推荐了,返回首页