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);
}
二、快速排序的原理图
快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。下面上个霸气的图来描述下整个算法的处理过程。
图:帮助理解
注意:此图非作者绘制;
谢谢!!!
一、概念:
快速排序: 是高快省的排序算法,在快速排序算法中,使用了分治策略。首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束。
优点:
快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。
这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。
空间复杂度:
当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的都是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);
}
二、快速排序的原理图
快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。下面上个霸气的图来描述下整个算法的处理过程。
图:帮助理解
注意:此图非作者绘制;
谢谢!!!
相关文章推荐
- 针对android&ios yuv旋转、镜像、格式转换、裁剪 算法实现
- 一步步学习数据结构和算法之快速排序效率分析及java实现
- python算法--快速排序详细实现
- 【算法和数据结构】排序(四)归并排序和快速排序(C++实现)
- [算法导论] 快速排序以及最大堆的C++实现
- 算法设计与分析 快速排序的递归实现算法
- 数据算法之快速排序(quickSort)的Java实现
- 【算法】快速排序的一个实现
- 二叉树-你必须要懂!(二叉树相关算法实现-iOS)
- 用js实现算法:冒泡排序、插入排序和快速排序
- Java实现算法之快速排序
- scala数据结构和算法-04-快速排序实现
- [算法练习]快速排序的C语言实现
- 快速排序(算法导论实现)
- C语言实现数组快速排序(含对算法的详细解释)
- 二叉树相关算法实现-iOS
- 插入排序、选择排序和快速排序的算法实现
- 图解算法练习--快速排序(GO实现)
- 内部排序冒泡排序、插入排序、选择排序、快速排序的算法和PHP实现
- iOS之OC随笔-九宫格的算法简单实现