• 快速排序


    时间复杂度最坏n2,平均nlogn

    解释:遍历一次O(n),快排采用分治法来遍历,看成二叉树,那么遍历的次数跟他的深度有关系,n个节点,那么深度至少是log(n+1),所以平均nlogn;二叉树最大深度那就是N了,所以最坏时间复杂度n2

    //找基准数,并放到中间
    //此函数执行一次,就找到了一个基准数并且就放在了正确位置
    int mid_index(arr[],left,right){
        int i=left+1;
        int j=right;
        int temp=arr[left];
        while(i<=j){
            while(arr[i]<temp) i++;
            while(arr[j]>temp) j--;
            if(i<j) swap(arr[i++],arr[j++]);
        }
        //到了边界了
        swap(arr[j],arr[left]);
        return j;
    }
    
    
    void quick_sort(arr[],left,right){
        //保证长度至少为2
        if(left>=right) return;
        int mid=mid_index(arr,left,right);
        quick_sort(arr,left,mid-1);
        quick_sort(arr,mid+1,right);
    }

    边界问题分析(第一个while循环条件i<=j):

    当i=j时,正好arr中心处,此时arr[i]==arr[j]:

    • 若该值小于temp,i++后i到了第一个大于temp的数,j不变,此时交换arr[j]和arr[left],j左边的值就都小于基准值,右边都大于基准值,也就是说这个基准值到了正确的位置了
    • 若arr[i]==arr[j] > temp,i不判断,j--之后到了最后一个小于基准值的数,此时i>j,交换arr[j]和arr[left],同上
  • 相关阅读:
    【Yom框架】漫谈个人框架的设计之一:是IRepository还是IRepository<T>?
    【NET】Winform用户控件的初步封装之列表页控件
    【C#】Smtp发送邮件
    c# http请求封装
    js 时区转换
    c# http请求接口
    netcore 中间件记录日志
    netcore 调用log4net
    netcore 从api下载文件并直接返回
    netcore 从api下载文件到本地
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11294474.html
Copyright © 2020-2023  润新知