快速排序感想
来源:互联网 发布:百度云限速脚本 知乎 编辑:程序博客网 时间:2024/06/10 16:24
快排作为一个常见的排序方式,校招的时候看过,没记到脑子中。最近在极度压抑的情况下,逼着自己,也算是学熟悉了。
关键点:
1,保留已经定位的位置 (之前一股脑的些,VS一直提醒说栈溢出,仔细想了下自己呆瓜自己好不容易跑一次比较,数值的位置已经定了,还不知耻的又拿去跑。不超出才怪)
2, 递归的终止条件 (这个一定要注意,要注意,要注意。if(left>=right) return; 看着只是一个不起眼的判断,实则很精妙 )
3, 两端遍历的数字之间交换的规律 (这个要注意,a[left]是temp, j是跑的最快的,即j是真正决定你跑的结果的。)
#include <stdio.h>#include <stdlib.h>// small --> bigvoid quicksort(int a[], int left,int right){int i=left;int j=right;int temp=a[left];if(left>=right)return; //要设定终止条件while (i!=j){while (j>i && a[j]<=temp) j--;a[i]=a[j]; while (j>i && a[i]>=temp)i++;a[j]=a[i]; } a[i]=temp;quicksort(a,left,i-1);quicksort(a,i+1,right);}void quickSort2(int a[],int left,int right){int i=left; int j=right; int temp=a[left]; if(left>=right)return;while(i!=j){while(i<j&&a[j]>=temp) j--;if(j>i)a[i]=a[j];//a[i]已经赋值给temp,所以直接将a[j]赋值给a[i],赋值完之后a[j],有空位while(i<j&&a[i]<=temp)i++;if(i<j)a[j]=a[i];}a[i]=temp;//把基准插入,此时i与j已经相等R[low..pivotpos-1].keys≤R[pivotpos].key≤R[pivotpos+1..high].keysquickSort2(a,left,i-1);/*递归左边*/quickSort2(a,i+1,right);/*递归右边*/}int main1(void){int a[10]={1,9,2,8,3,7,4,6,5,0};// int length=sizeof(a)/sizeof(int);int length=10;quicksort(a,0,9);//quickSort2(a,0,9);for (int i=0;i<length;i++){printf("%5d",a[i]);}system ("pause");return 0;}
快速排序有一个超级好的地方,o(n)复杂度求第K大的值。你的只要你的 i==K-1,那么a[k]的值就是第K大的值。 比起堆排序好太多了。
阅读全文
0 0
- 快速排序感想
- 排序感想
- 排序感想
- 对于排序我有点感想
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 一款GIF录屏小软件
- Ubuntu中出现libz.so.1问题
- Kali Linux 下使用官网的 .tar.bz2压缩包 安装Sublime Text 3的方法
- 深入理解JavaScript运行机制
- 用织梦CMS配合织梦万能API插件开发的微信小程序demo
- 快速排序感想
- java异常处理
- TOJ 2746: Classifying Triangles
- LinearLayout、RelativeLayout、GridLayout目前安卓常用的三种布局
- 《Spring In Action》读书笔记
- Python简谈
- Windows和linux操作socket的区别(简单对比)
- 个人总结67
- MySQL 5.7.20 安装教程