数据结构之快速排序的改进

题目描述:请将平均值作为哨兵结点改进快速排序。

      按照一般的快速排序算法,在序列基本顺序或者基本逆序时,会比较多次,这样会造成大量是时间浪费。 第一次查找n-1此,第二次查找n-1次,......,最后查找1次。总共会有n(n-1)/2次.

     快排的最优情况是每趟将序列一分为二,正好在表中间,将表分成两个大小相等的子表,类似于折半查找。其时间复杂度为:

T(n) = Cn + 2T(n/2)

     <= n + 2T(n/2)
     <= n + 2{n/2 +2T(n/4)}
     ......
     <= kn + 2^kT(n/2^k);
    k~log2 N

T(n)  ~ O(n long2N)

而改进后的快速排序,基本可以使得在每种情况下的时间复杂度都为O(nlong2N)

 

下面贴上快排使用平均值的改进算法:

/*
快速排序的改进算法
一般的快速排序是将数组的第一个元素作为哨兵结点,依次进行比较。而当数组数据基本有序,或者基本无序时,一般的快速排序会比较浪费时间

为了节省排序的时间,我们可以将数组的平均值作为哨兵结点
*/
#include 
int Onesort(int *arr,int low,int high)
{
    int avg = 0;
    int sum = 0;
    for(int i=low;iavg && j>i) j--;

        if(iavg,或者arr[j]

 

你可能感兴趣的:(数据结构,排序)