• 数据结构常用算法复习---快速排序


    快速排序的时间复杂度为O(nlogn),在排序算法中效率较高,所以经常被采用。快排的思想为分治法,软件公司笔试面试中经常会考到该算法。
    算法的基本思想:

    1.先从数列中抽出一个数作为基准数

    2.分区过程,将比这个数大的数全部放在右边,将比这个数小的全放在左边

    3.对第二步分区得到的两个区在进行分区,直到每一个区中只有一个数

    算法过程举例:

    原始数列: 27 99 11 37 92 78 21 35 57 62

    1.抽出一个数作为基数:27(low=0,high=9)

    2.分区,从右往左找,找到比27小的数(62比27大,high--,57比27大,high—….)

    21 99 11 37 92 78 27 35 57 62(low=0,high=6)

    再从左往右找比27大的数字,21 27 11 37 92 78 99 35 57 62(low=1,high=6)

    再从high=6的基础上往左找,找到11比27小 21 11 27 37 92 78 99 35 57 62(low=1,high=1)

    此时low<high的条件不满足,结束分区。

    3.对每一个分区重复第二步

    代码:

    int Partion(int a[],int low,int high)
    {
        int key;
        key = a[low];
        while(low<high){
            while((low<high)&&a[high]>=key)  
            high--;
            a[low]=a[high];
            while((low<high)&&a[low]<=key)
            low++;
            a[high]=a[low];  
        }   
        a[low] = key; 
        return low;
    }
    void qsort(int a[],int low,int high){
        int loc=0;
        if(low<high){
            loc= Partion(a,low,high);
            qsort(a,low,loc-1);
            qsort(a,loc+1,high);   
        }
    }

     

  • 相关阅读:
    武大高级软件工程2017第7次作业
    武大高级软件工程2017第6次作业
    武大高级软件工程2017第5次作业
    四则运算相关博客列表
    武大高级软件工程2017评分汇总
    武大高级软件工程2017第4次作业
    武大高级软件工程2017第3次作业
    武大高级软件工程2017第2次作业
    API文档模板
    武大高级软件工程2017第1次作业
  • 原文地址:https://www.cnblogs.com/sysu-kiros/p/3248667.html
Copyright © 2020-2023  润新知