快速排序的改进方法

原创 2016年06月02日 12:37:20

可以在选择中枢结点时,选择left, right,(left+right)/2三个位置中关键字居中的元素。

注意需要将选好的中枢结点与左端元素交换位置,因为如果不交换位置,算法就有问题了,这是由于right--在left++先执行,导致right最后退出循环时指向的值一定比中枢结点值小。例如选择的是right作为中枢结点,最后一步会把更小的值交换到最后。

void quickSort(Element arr[], int left, int right)
{
    int mid;
    
    if(left < right)
    {
        mid = partition_im(arr, left, right);
        quickSort(arr, left, mid-1);
        quickSort(arr, mid+1, right);
    }
}


int partition_im(Element arr[], int left, int right)
{
    Element base;
    Element temp;
    int min, mid;
    
    mid = (left + right)/2;
    min = median(arr, left, mid, right);//选择三者中的中间值
    base = arr[min];
    
    //将中轴元素与左端点元素交换位置
    if(min != left)
    {
        temp = arr[min];
        arr[min] = arr[left];
        arr[left] = arr[min];
        min = left;
    }
    
    while(left < right)
    {
        while(arr[right].key >= base.key && right > left)
            right--;
        while(arr[left].key <= base.key && left < right)
            left++;
        if(left < right)
        {
            temp = arr[right];
            arr[right] = arr[left];
            arr[left] = temp;
        }
    }

    arr[min] = arr[left];
    arr[left] = base;
        
    return left;
}


快速排序 改进快排的方法

快速排序法事应用最广泛的排序算法之一,最佳情况下时间复杂度是 O(nlogn)。但是最坏情况下可能达到O(n^2)。说明快速排序达到最坏情况的原因。并提出改善方案并实现之。 答: 改进方案:改进选...

快速排序的改进

快速排序的改进 快速排序最坏情况下,要比较O(n^2)次,但平均性能为nlogn,基本达到了比较类排序所需时间的的下界。核心代码为: void qSort(int *data, int begin...

快速排序改进算法

#include using namespace std; const int M = 20; void quickSort(int *data,const int left,const int r...

三种快速排序以及快速排序的优化

1、快速排序的基本思想:    快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

快速排序算法及其改进算法实现

快速排序算法不稳定。        快速排序算法在大多数的计算机上运行得都比其他排序算法快,而且排序算法消耗资源少。就平均时间而言快排是所有内部排序中最好的一个。对于已经排好的数组,最速排序有最坏时间...

快速排序及优化算法(三向切分的快速排序)

快速排序应该是应用最广的排序算法了,快速排序引人入目的特点包括原地排序(只需要一个很小的辅助栈),并且将长度是N的数组排序所需的时间和NlgN成正比。另外,快速排序的内循环比大多数排序算法都要小很多,...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

快速排序的两种改进方法

  • 2015年04月01日 10:16
  • 6.49MB
  • 下载

快速排序的两种改进方法算法及topK问题求解

#include #include #include /** * 位操作实现的交换算法 */ void swap(int *a int *b) { *a = *a^*b; *b = *...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序的改进方法
举报原因:
原因补充:

(最多只允许输入30个字)