快速排序算法
来源:互联网 发布:手机淘宝1元抢购在哪 编辑:程序博客网 时间:2024/06/05 08:37
快速排序的基本思想:快速排序又称为分区交换排序,是目前以知的平均速度最快的一种排序方法,采用一种分治的策略,是对冒泡排序的一种改进。其基本思想是:在待排序文件的记录中任取其中一个记录,通常选取第一个记录。以该记录的关键字为分界点(pivot),经过一趟排序后,将全部记录分为两部分:所有比分界点小的记录都存放在分界点之前,所有比分界点大的记录都排在分界点之后,然后再分别对这两个部分重复上述过程,直到每一部分只剩下一个记录为止。显然,每趟快速排序后,分界点都找到了自己在有序序列中的适当位置。
一次快速排序(一次划分)的实现过程如下:
设置两个指针,low和high,分别指向待排序列两端,并将序列中的第一个记录暂存起来作为分界点(pivot)。首先,用high指针所指记录的关键字与pivot进行比较,若该关键字比pivot大(或相等),则high指针集训向前搜索;若该关键字比pivot小,则将high指向的记录存入low指针所指的位置,此时high指针停止搜索,转由low指针开始向后搜索。
low向后移动,将low指针所指记录的关键字与pivot进行比较,若该关键字比pivot小,则low指针继续向后搜索;若该关键字比pivot大(或相等),则将low指向的记录存入high指针所指向的位置上,此时low指针停止搜索,high指针重新开始被暂停的向前搜索,......。整个划分过程就是在high指针和low指针不断交替地进行序列的向前和向后搜索中进行的,知道low指针和high指针相遇为止,这时他们相遇的位置就是pivot对应记录在有序序列终的位置,将pivot写入该位置,从而完成一次划分。
快速排序算法递归实现代码:
#include <iostream>using namespace std;int Partition(int *a,int low,int high) //进行划分{ int pivot; pivot = a[low]; while(low < high) { while(low < high && a[high] >= pivot) high--; if(low < high) { a[low]=a[high]; low++; } while(low < high && a[low] <= pivot) low++; if(low < high) { a[high]=a[low]; high--; } } a[low]=pivot; return low;}void QuickSort(int *a ,int low,int high){ int id; if(low < high) { id = Partition(a,low,high); QuickSort(a,low,id-1); QuickSort(a,id+1,high); }}int main(){ int a[10] = {3,2,1,5,6,7,2,10,8,9}; int low = 0; int high = 9; cout << "排序之前:"; for(int i=0;i<10;i++) cout << a[i] << " "; cout << endl; QuickSort(a,low,high); cout << "排序之后:"; for(int i=0;i<10;i++) cout << a[i] << " "; cout << endl; return 0;}
排序结果:
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- SQL Server 2005 安装图解教程
- struts2 标签的使用之一 s:if
- 何时使用元素,何时使用属性探讨 XML 设计中的老问题
- Win7(64Bit) 安装 PL/SQL Developer图解
- Find Nth Biggest Number Based On QuickSort
- 快速排序算法
- Memory
- 在线过期数据迁移到离线数据库的案例
- 教你显示动态数字的方法
- 15 Step To Hacking Windows Using Social Engineering Toolkit And Backtrack 5
- 修练8年C++面向对象程序设计之体会
- iOS上的设计辅助工具——Skala View
- iOS中的Delegate实现页面间的传值
- Java-性能优化-工具篇-jvisualvm