您的位置:首页 > 移动开发 > IOS开发

iOS 算法~快速排序实现

2017-12-23 10:14 232 查看
//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄

一、概念:

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

优点:

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

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

空间复杂度:

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

代码实现



 void sort(int *a,int left,int right) {

    

    if(left >= right)  return;       

    

    int i = left; 

    int j = right;

    int key = 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);   

}

二、快速排序的原理图

  

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

图:帮助理解






注意:此图非作者绘制;

谢谢!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息