快速排序
快速排序是一种不稳定的排序(其余的不稳定排序有堆排序,直接选择排序,希尔排序),而且是目前已知最快的排序算法。原理不再说了,直接上代码。
首先是一次划分的实现
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~