永发信息网

有一组关键字序列(41,34,53,38,26,74),采用快速排序方法由大到小进行排序

答案:1  悬赏:40  手机版
解决时间 2021-01-26 18:02
  • 提问者网友:饥饿走向夜
  • 2021-01-25 18:09
有一组关键字序列(41,34,53,38,26,74),采用快速排序方法由大到小进行排序
最佳答案
  • 五星知识达人网友:低音帝王
  • 2021-01-25 18:40
快速排序又称分区交换排序,是对冒泡排序的改进,快速排序采用的思想是分治思想。。
算法原理: 
(1)从待排序的n个记录中任意选取一个记录(通常选取第一个记录)为分区标准;
(2)把所有小于该排序列的记录移动到左边,把所有大于该排序码的记录移动到右边,中间放所选记录,称之为第一趟排序;
(3)然后对前后两个子序列分别重复上述过程,直到所有记录都排好序。
稳定性:不稳定排序。
时间复杂度: O(nlog2n)至O(n2),平均时间复杂度为O(nlgn)。
最好的情况:是每趟排序结束后,每次划分使两个子文件的长度大致相等,时间复杂度为O(nlog2n)。
最坏的情况:是待排序记录已经排好序,第一趟经过n-1次比较后第一个记录保持位置不变,并得到一个n-1个元素的子记录;第二趟经过n-2次比较,将第二个记录定位在原来的位置上,并得到一个包括n-2个记录的子文件,依次类推,这样总的比较次数是: 

Cmax=∑i=1n−1(n−i)=n(n−1)/2=O(n2)
//a:待排序数组,low:最低位的下标,high:最高位的下标
void quickSort(int a[],int low, int high)
{
    if(low>=high)
    {
        return;
    }
    int left=low;
    int right=high;
    int key=a[left];    
    while(left!=right){
        while(left=key)    
            --right;
        a[left]=a[right];
        while(left            ++left;
        a[right]=a[left];    
    }
    a[left]=key;    
    quickSort(a,low,left-1);
    quickSort(a,left+1,high);
}题目中对(41,34,53,38,26,74)排序
第一趟     26,34 ,53 ,38,41 ,74
26,34 , 41 ,38,53 ,74
26,34 , 38 ,41,53 ,74
这样序列就这样分割成了两部分,左边部分{26,34 , 38 } 均小于 基准值(41);右边部分 {53 ,74},均大于基准值。这样子我们就达到了分割序列的目标。在接着对子序列用同样的办法进行分割,直至子序列不超过一个元素,那么排序结束,整个序列处于有序状态。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯