快速排序算法实现
来源:互联网 发布:有道云协作 mac 编辑:程序博客网 时间:2024/06/05 19:11
快速排序(QuickSort)由C. A. Hoare在1962年提出的一种划分交换排序。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序算法代码如下:
void QuickSort(SeqList R, int low, int high){ //对R[low..high]快速排序 int pivotpos; //划分后的基准记录的位置 if(low<high){ pivotpos=Partition(R, low, high); //对R[low..high]做划分 QuickSort(R, low, pivotpos-1); //对左区间递归排序 QuickSort(R, pivotpos+1, high); //对右区间递归排序 }}//QuickSortint Partition(SeqList R, i, j){ //调用Partition(R, low, high)做划分并返回基准记录的位置 ReceType pivot=R[i]; //用区间的第一个记录作为基准 while(i<j){ //从区间的两端交替向中间扫描,直至i=j为止 while(i<j&&R[j].key>=pivot.key) //pivot相当于在位置i上 j--; //从右向左扫描,查找第1个关键字小于pivot.key的记录R[j] if(i<j) //表示找到的R[j],使R[j]<pivot.key R[i++]=R[j]; //相当于交换R[i]和R[j] 交换后i指针加1 while(i<j&&R[j].key<=pivot.key) //pivot相当于在位置j上 i++; //从左向右扫描,查找第1个关键字大于pivot.key的记录R[i] if(i<j) //表示找到的R[i],使R[j]>pivot.key R[j--]=R[i]; //相当于交换R[i]和R[j] 交换后j指针减1 } R[i]=pivot; //基准位置已被最后定位 return i; //返回基准记录的位置}
快速排序的执行过程:
快速排序执行的全过程可用递归树来描述,如下图所示。
一次划分过程如下图所示。
QuickSort执行时的递归树:
快速排序算法是一种不稳定的排序方法,平均时间复杂度为O(n×lgn/lg2),最差情况时间复杂度为O(n×n)。
阅读全文
1 0
- 快速排序算法实现
- 快速排序算法实现
- 快速排序算法实现
- 快速排序算法实现
- 实现快速排序算法
- 快速排序算法实现
- 快速排序算法实现
- 快速排序算法实现
- 快速排序算法实现
- 实现快速排序算法
- 快速排序算法实现
- 快速排序算法实现
- 算法实现-->快速排序
- 快速排序算法实现
- 快速排序算法实现
- 快速排序算法实现
- 快速排序算法实现
- 快速排序算法实现
- 修改git 账号,邮箱
- redis订阅发布
- Angular.js学习笔记——第一课 简介
- jQuery绑定事件 bind用法
- 使用Intellij Idea打包java为可执行jar包
- 快速排序算法实现
- 两个Android端基于蓝牙通讯的demo
- Git stash命令
- Java异常处理( try catch finally throw throws exception error)
- 上课后对【css】中清除浮动的总结
- 【NOIP模拟考一】组合数学 day1 third 子集
- Leetcode 32. Longest Valid Parentheses
- loadrunner简单使用——HTTP,WebService,Socket压力测试脚本编写
- 利用模板模式封装APP版本更新模块