快速排序

  快速排序是一种不稳定的排序(其余的不稳定排序有堆排序,直接选择排序,希尔排序),而且是目前已知最快的排序算法。原理不再说了,直接上代码。  

首先是一次划分的实现

  int partition(int arr[], int low, int high):将arr中小于arr[low]的元素放在左半部分,大于arr[low]的元素放在右半部分

 1 int partition(int arr[], int low, int high)
 2 {
 3     int pivotkey = arr[low], rc = arr[low];
 4 
 5     while(low < high)
 6     {
 7         while(low < high && arr[high] >= pivotkey) --high;
 8         arr[low] = arr[high];
 9         while(low < high && arr[low] <= pivotkey) ++low;
10         arr[high] = arr[low];
11     }
12 
13     arr[low] = rc;
14     return low;
15 }

然后是快速排序的主程序:

  void quicksort(int arr[], int low, int high): 将[low:high]范围内的所有元素作快速排序

 1 void quicksort(int arr[], int low, int high)
 2 {
 3     int pivotloc;
 4     if(low < high)
 5     {
 6         pivotloc = partition(arr, low, high);
 7         quicksort(arr, low, pivotloc-1);
 8         quicksort(arr, pivotloc+1, high);
 9     }
10 }

   需要注意的是,在我们的partition中,如果arr是有序的,则快速排序的最坏性能是O(n*n),所以为了找到更好的枢纽,有时候需要在partition中找出arr[low], arr[high]和arr[(low+high)/2]三个元素中的中间值作枢纽,这样能有效避免上面的这种最坏情况。

Over~

原文地址:https://www.cnblogs.com/cobbliu/p/2513417.html