快速排序
2012-05-22 15:42
113 查看
快速排序是一种不稳定的排序(其余的不稳定排序有堆排序,直接选择排序,希尔排序),而且是目前已知最快的排序算法。原理不再说了,直接上代码。
首先是一次划分的实现
int partition(int arr[], int low, int high):将arr中小于arr[low]的元素放在左半部分,大于arr[low]的元素放在右半部分
然后是快速排序的主程序:
void quicksort(int arr[], int low, int high): 将[low:high]范围内的所有元素作快速排序
需要注意的是,在我们的partition中,如果arr是有序的,则快速排序的最坏性能是O(n*n),所以为了找到更好的枢纽,有时候需要在partition中找出arr[low], arr[high]和arr[(low+high)/2]三个元素中的中间值作枢纽,这样能有效避免上面的这种最坏情况。
Over~
首先是一次划分的实现
int partition(int arr[], int low, int high):将arr中小于arr[low]的元素放在左半部分,大于arr[low]的元素放在右半部分
int partition(int arr[], int low, int high) { int pivotkey = arr[low], rc = arr[low]; while(low < high) { while(low < high && arr[high] >= pivotkey) --high; arr[low] = arr[high]; while(low < high && arr[low] <= pivotkey) ++low; arr[high] = arr[low]; } arr[low] = rc; return low; }
然后是快速排序的主程序:
void quicksort(int arr[], int low, int high): 将[low:high]范围内的所有元素作快速排序
void quicksort(int arr[], int low, int high) { int pivotloc; if(low < high) { pivotloc = partition(arr, low, high); quicksort(arr, low, pivotloc-1); quicksort(arr, pivotloc+1, high); } }
需要注意的是,在我们的partition中,如果arr是有序的,则快速排序的最坏性能是O(n*n),所以为了找到更好的枢纽,有时候需要在partition中找出arr[low], arr[high]和arr[(low+high)/2]三个元素中的中间值作枢纽,这样能有效避免上面的这种最坏情况。
Over~
相关文章推荐
- 快速排序
- 快速排序QuickSort.c
- 冒泡和Arrays类提供的快速排序比较时间
- 常见的排序算法示例(1)-冒泡排序、快速排序
- 排序算法总结(四)快速排序【QUICK SORT】
- Quick Sort (快速排序 C++)
- 快速排序学习4(最初版加随机版)
- JAVA 数组的排序方法冒泡、选择、快速、数组递增
- JAVA 数组的排序方法冒泡、选择、快速、数组递增
- 快速排序
- 排序算法之快速排序
- JAVA实现快速排序
- [Java]交换排序法(冒泡、快速)的简单说明
- 算法--快速排序
- 算法入门学习----2.2快速排序
- 消除原理____假设数组中有一个数字出现的次数超过了数组长度的一半,试编程找出这个数字(qosrt 快速排序 哈希)
- 第16周项目1-快速排序
- 数据机构快速排序之c语言实现
- 快速排序
- [Java]快速排序,以及双基快排