手撕代码 之 快速排序

2018-05-28  本文已影响0人  孙树冲

1.实现快速排序算法

初始状态时,pivot是最左侧位置left的元素,i指向left,j指向right。

i 右侧一个元素也就是 i+1 位置开始检测,如果它的值大于pivot,那么将其与 j 位置的元素进行互换,将 j 左移一个元素 j-- ,继续对 i+1 位置进行检测;而如果它的值小于pivot,直接对 i 右移一个元素 i++

通过这种方式,使得比 pivot 大的元素全部都移到了数组的右侧,而比 pivot 小的元素全部都留在了数组左侧,实现了对数组进行分割的目的。

代码如下。

public static void quicksort_2(int[] a, int left, int right){
      if(left >= right)   return;
      int pivot = a[left];
      int i = left, j = right;
      while(i < j){
          if(a[++i]>pivot)
              swap(a, i--, j--);
      }
      swap(a, left, j);
      quicksort_2(a, left, j-1);
      quicksort_2(a, j+1, right);
}

public static void swap(int[] a, int i, int j){
      System.out.println("i: " + i + ", j: " + j);
      int temp = a[i];
      a[i] = a[j];
      a[j] = temp;
      Print(a);
}

2.快速排序拓展 之 数组中第K大(小)的元素

3.快速排序拓展 之 数组中最大(小)的K个元素

上一篇 下一篇

猜你喜欢

热点阅读