最形象解释帮助理解快速排序


              快速排序想必大家都知道吧,快速排序(Quick Sort)虽然算法在最坏的情况下运行时间为O(n^2),但由于平均运行时间为O(nlogn),并且在内存使用、程序实现复杂性上表现优秀,尤其是对快速排序算法进行随机化的可能,使得快速排序在一般情况下是最实用的排序方法之一。被认为是当前最优秀的内部排序方法。
              这几天在百度C语言吧看到这样一种解释快速排序的方法,堪称经典,自己帮他把代码补全了,收录了,快速排序没理解或是想学习一下的同学可以看一下。
             形象的说,快速排序就是一个把白菜按大小分成两堆的过程,选定一个‘标准大小的白菜’,i和j两人从两边一起挑,j挑到小的白菜就把它扔到i那头然后等,i挑到大的白菜就把它扔到j那头然后等,挑到i和j碰头了,把基准白菜放到碰头的地方。这样白菜就分成两堆。分别把这两堆按同样方法处理,最后得到一排按大小排列的白菜:)
 
void quickSort(char* arr,int startPos, int endPos)
{
int i,j;
char ch;
ch=arr[startPos]; //挑出一颗作为基准的白菜
i=startPos; //开始的白菜
j=endPos; //结束的白菜
while(i<j)     //白菜没挑完
{
while(arr[j]>=ch && i<j)–j;   //这棵比标准白菜大,跳过,直到遇到小的
arr[i]=arr[j];                 //把这棵小的放到前面
while(arr[i]<=ch && i<j)++i;   //跳过比标准小的,直到遇 到大白菜
arr[j]=arr[i];                 //把大白菜扔到刚才遇见小白菜的地方
}
arr[i]=ch;
if(i-1>startPos) quickSort(arr,startPos,i-1);
if(endPos>i+1) quickSort(arr,i+1,endPos);
}
这样解释应该是比较好理解了吧,如果不能理解建议写几个数自己一步一步执行一遍,再有就是多敲几次,会用就好了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值