swift&C双语版算法之快速排序

快速排序

快速排序的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
快速排序的复杂度为O(N*logN)。

C

<pre>
//快速排序
void quick_sort(int num[],int left,int right)
{
if ((left > right)) {
return ;
}

//设置基数值
int i = left,j = right,temp = num[left],t;
while (i != j) {
    //从右往左寻找比基数值小的数
    while ((i < j) && (num[j] >= temp)) {
        j--;
    }
    //从左往右寻找比基数值大的数
    while ((i < j) && (num[i] <= temp)) {
        i++;
    }
    
    //i,j未相遇前,如果找到的话进行交换
    if (i < j) {
        t = num[i];
        num[i] = num[j];
        num[j] = t;
    }
}

//一个基数值归位
if (left < i) {
    t = num[left];
    num[left] = num[i];
    num[i] = t;
}

//二分递归
quick_sort(num, left, i-1);
quick_sort(num, i+1, right);

}

//结果
int num[] = {15,3,45,7,17,99,25,25,14,75,48,14,2,3,7,17};
quick_sort(num, 0, count -1);
//2,3,3,7,7,14,14,15,17,17,25,25,45,48,75,99,Program ended with exit code: 0
</pre>

Swift

<pre>
//快速排序
func quickSort(array: inout [Int],left:Int ,right:Int) {

if array.isEmpty || array.count == 1 || left > right {
    return
}

//设置基数值
let temp = array[left]
var i = left, j = right
while i != j {
    
    //从右往左查找比基数小的值
    while (i<j) && (array[j]>=temp) {
        j -= 1
    }
    
    //从左往右查找比基数大的值
    while (i<j) && (array[i]<=temp) {
        i += 1
    }
    
    //i,j未相遇前,如果找到的话进行交换
    if i<j  {
        swap(&array[i], &array[j])
    }
}

//一个基数值归位
if left < i {
    swap(&array[left], &array[i])
}

//二分 递归
quickSort(array: &array, left: left, right: (i-1))
quickSort(array: &array, left: (i+1), right: right)

}

var originNum :[Int] = [15,3,45,7,17,99,25,25,14,75,48,14,2,3,7,17]
quickSort(array: &originNum, left: originNum.startIndex, right: originNum.index(before: originNum.endIndex))
print(originNum) //[2, 3, 3, 7, 7, 14, 14, 15, 17, 17, 25, 25, 45, 48, 75, 99]

<pre>

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

推荐阅读更多精彩内容

  • 一、直接插入排序 直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的元素记录,按其关键字...
    kevin16929阅读 575评论 0 0
  • 前言 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想--...
    fjytqiu阅读 2,234评论 0 3
  • 背景 按照相关排序算法的解释,手动用Python实现了一遍,记录一下。(部分代码是摘自网上)排序结果为从小到大。 ...
    ikaroskun阅读 416评论 0 2
  • 我一直觉得写代码也可以写出艺术,在不懂画的人的眼里,《向日葵》不过是小孩子的涂鸦,在懂代码的人眼里,那看似混乱的字...
    AidenRao阅读 4,178评论 9 59
  • 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳...
    采姑娘的大白菜阅读 400评论 0 0