iOS 算法~快速排序实现

//联系人:石虎QQ:1224614774 昵称:嗡嘛呢叭咪哄

一、概念:

快速排序: 是高快省的排序算法,在快速排序算法中,使用了分治策略。首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束。

优点:

快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。

这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。

空间复杂度:

当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。

代码实现

voidsort(int*a,intleft,intright) {

if(left >= right)return;

inti = left;

intj = right;

intkey = a[left];

while(i < j) {

while(i < j && key >= a[j]) {

j--;

}

a[i] = a[j];

while(i < j && key <= a[i]) {

i++;

}

a[j] = a[i];

}

a[i] = key;

sort(a, left, i-1);

sort(a, i+1, right);

}

二、快速排序的原理图

     快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。下面上个霸气的图来描述下整个算法的处理过程。

图:帮助理解

注意:此图非作者绘制;

谢谢!!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,220评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,743评论 0 15
  • 仔仔十岁以前我可不这么想。 一个虎头虎脑的小男孩,忙活在自己的玩具堆里,不哭也不闹。一开门见到妈妈,就会挥舞着胖乎...
    秋晨徐徐阅读 286评论 0 1
  • 夜空里闪着烟花的味道,弥漫着淡淡的火药的清香,抽着鼻子使劲的闻着,傻傻地盯着天空看,只到最后那末嫣红飘散在黑色...
    淡洒清香阅读 168评论 0 0
  • - 壹 - 我是七小,来自西南偏远山区的小县城,那里不靠海,不下雪,与外面的世界相隔的,是海拔上千米的高原。层峦叠...
    一凡nnxx阅读 362评论 0 1