快速排序

参考链接: https://blog.csdn.net/weixin_41190227/article/details/86600821

快速排序

  • 空间复杂度: ,适合在数据集比较大的时候
  • 时间复杂度:最好的情况为,最差的情况为,平均时间复杂度为

基本思想

  1. 从数列中跳出一个元素,称为“基准”(pivot);
  2. 重新排列所有的数据,所有元素比基准小的摆放在基准的一边,所有比基准大的摆放到基准另一边
  3. 递归地执行过程1和过程2

代码实现

public static void quickSort(int[] array,int start,int end){
  if (start >= end) return;
  int pivot = array[start];  // 取第一个数作为基准
  int left = start;  // 从左向右的标记
  int right = end;  // 从右向左的标记
  
  while(left < right){
    while(left < right && array[right] > pivot) // 从右向左遍历,右边的数>基准数,则标记位左移
      right --;
    array[left] = array[right]; // right此时标记的数<基准数,将该数放到左边的空位

    while(left < right && array[left] < pivot) // 从左向右遍历,左边的数<基准数,则标记为右移
      left ++;
    array[right] = array[left];  // left此时标记的数>基准数,将该数放到右边的空位
  }
  array[left] = pivot;  // 将最初设立的基准数放到left所标记的空位,此时left标记位左边的数都小于右边的数
  quickSort(array,start,left-1);  // 对left左边的数重复执行过程1和过程2
  quickSort(array,left+1,end);  // 对left右边的数重复执行过程1和过程2
}
  • 最好的情况:[1,2,3,4,5,6,7] 时间复杂度:
  • 最差的情况:[7,6,5,4,3,2,1] 时间复杂度:

你可能感兴趣的:(快速排序)