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

作者: 我系哆啦 | 来源:发表于2016-07-08 23:43 被阅读71次

快速排序

快速排序的基本思想是:
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>

相关文章

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

    快速排序 快速排序的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • swift&C双语版算法之桶排序

    桶排序 桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里。假设待排序的数组a中共有N个...

  • swift&C双语版算法之冒泡排序

    冒泡排序 冒泡排序的基本思想是:每次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。冒泡排序的核心部分是双...

  • 1.2-交换排序-快速排序

    参考链接 交换排序:快速排序(Quick Sort) 白话经典算法系列之六 快速排序 快速搞定 快速排序是C.R....

  • 常见算法3、快速排序 Quick sort

    一、简介 快速排序是一种使用分而治之(divide and cinquer,D&C)的排序算法,是最快的排序算法之...

  • 2018-07-03

    排序算法之快速排序 快速排序算法由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加...

  • 算法之快速排序、分而治之

    分而治之 快速排序——一种常用的优雅的排序算法。快速排序使用分而治之的策略。 分而治之 (divide and c...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 排序算法之快速排序

    排序算法之快速排序 参考自算法(第四版),快速排序 算法思想 对数组中取一个切分元素,下文简称pivot 然后使得...

网友评论

    本文标题:swift&C双语版算法之快速排序

    本文链接:https://www.haomeiwen.com/subject/ywjrjttx.html