-
总所周知 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用。
-
基本原理是 数组a = [1,3,5,7,6,4,2]
1 选定一个 基准 a[0] 2 把比 a[0]小的放左边,比a[0]大的放右边. 中断递归如果少于两个数字 则不执行。 3 然后再分别对两边 执行 1,2,3操作。 -
对快速排序 的 想法 1 在待排序元素 大部分是有序的情况下, 速度 非常很快。 2 在最差的情况下,速度就很慢了。 相当于冒泡了 3 所以 快排的 优化, 定基准 非常重要,例如待排序是有序的,基准定在中间,xiao'lv 4 时间复杂度为nlogn,不稳定排序
-
Swift 极简版本 import UIKit extension Array { var decompose : (head: Element, tail: [Element])? { return (count > 0) ? (self[0], Array(self[1..<count])) : nil } }
func qsortDemo(input: [Int]) -> [Int] { if let (pivot, rest) = input.decompose { let lesser = rest.filter { $0 < pivot }//这里是小于于pivot基数的分成一个数组 let greater = rest.filter { $0 >= pivot }//这里是大于等于pivot基数的分成一个数组 return qsortDemo(lesser) + [pivot] + qsortDemo(greater)//递归 拼接数组 } else { return [] } } var a:[Int] = [1,2,4,6,2,4,3,7,8] qsortDemo(a) 复制代码
///次方法来自http://blog.csdn.net/cg1991130/article/details/48274919
-
swift 版本 import UIKit
func quickSort(inout a:[Int],l:Int,r:Int){ if l < r { var i = l, j = r ,x = a[i] while i < j && a[j] >= x{ j -= 1 } if i < j { a[i] = a[j] i += 1 } while i < j && a[i] < x { i += 1 } if i < j { a[j] = a[i] j -= 1 } a[i] = x quickSort(&a, l: l, r: i-1) quickSort(&a, l: i+1, r: r) } } var b = [8,7,6,5,4,3,2,1] quickSort(&b, l: 0, r: 7) print(b) 复制代码
-
c版本
#include <stdio.h>
///三个参数 a要排序的 数组, l扫左边的 r扫右边
void quickSort(int a[],int l, int r){
/// 左边要小于 右边才有意义
if (l < r){
//保存 一下 ,基准定为X
int i = l, j = r, x = a[i];
///左边小于右边才开始循环,排序里面
while (i < j) {
///从 右边开始向左查找,小于 基准X的值。
while (i < j && a[j] >= x)
j--;
if (i < j)
a[i++] = a[j];///调换 他们的值
///该从左边开始向右查找 比基准x大与等于值
while (i < j && a[i] < x)
i++;
if (i < j)
a[j--] = a[i];
}
///然后把 x的值 赋值回去
a[i] = x;
///递归 左边
quickSort(a, l, i-1);
///右边
quickSort(a, i+1, r);
}
}
int main() {
int a[8] = {8,7,6,5,4,3,2,1};
quickSort(a, 0, 7);
for (int i = 0; i < 8; i++) {
printf("%d",a[i]);
}
printf("\n");
return 0;
}
复制代码
- ######看我那么可爱n(≧▽≦)n
- 关注我的微薄 (梁同桌):http://weibo.com/tongrenyinsheng
- 个人博客: http://www.liangtongzhuo.com
- ios 个人写的app (同人音声)ASMR音乐