排序算法总结(四)-快速排序

快速排序

算法原理:在待排序数组里选择一个基准,根据这个基准将数组分成两个部分,第一个部分小于这个基准,第二个部分大于这个基准。继续对这两个部分进行排序,以达到整个序列有序。

void QuickSort(int a[], int start, int end){
    if(start > end || a.length<1 || start < 0 || a.length < end)
        return;
    int temp=a[start];
    int te;
    int i = start, j=end;
    while (i<j){
        while(i<j && a[j] > temp)
            j--;
        while(i<j && a[i] < temp)
            i++;
        if(i<j){
            te = a[i];
            a[i] = a[j];
            a[j] = te;
        }
    }
    te = a[i];
    a[i] = temp;
    a[start] = te;
    QuickSort(a, start, i-1);
    QuickSort(a, i+1, end );
}
    
        
        
        

时间复杂度:最优情况下,基准每次都划分得很均匀,如果排序n个关键字,则需递归log2n次, 每次需要比较的次数分别为n, n/2, n/4等等,所以最优情况下,排序算法的时间复杂度为O(nlogn).

最坏情况下,当待排序的序列为正序或逆序排列时,每次划分只得到一个比上一次划分少一个记录的子序列。此时需要执行n-1次递归调用,比较次数分别为1,2,3,...,n-1,n(n-1)/2,即算法的时间复杂度为O(n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值