栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

排序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

排序

6.1 排序的基本概念:

  1. 稳定:若相等的两个A,B,若在排序前的序列中A领先于B,经过排序后A仍然领先于B,则称所用的排序方法是稳定的。反之,若发生变化,则是不稳定的

6,2 插入类排序:

    插入排序的基本思想是:在一个已排好序的记录子集的基础上,将待排序的记录有序地插入到记录自己中,直到所有待排序记录去全部插入为止。

void InsSort(RecordType r[],int length){

    for(i=2;i<=length;i++){
    r[0]=r[i];j=i-1;
    while(x.key

6.3 希尔排序

    希尔排序的算法思想:将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减少,循环上述操作;当gap等于1时,利用直接插入,完成排序。

void ShellSort (ElemType A[],int n){
//对顺序表作希尔插入排序,基本算法和直接插入排序相比,做了以下修改:
//1.前后记录位置的增量是dk,不是1
//2.r[0]只是暂时存储单元,不是哨兵,当j<=0时,插入位置已到
    for(dk=n/2;dk>=1;dk=dk/2)
        for(i=dk+1;i<=n;i++)
            if(A[i].key0&&A[0].key


时间复杂度:O(N*logN)

6.4简单选择排序:

  • 从待排序序列中,找到关键字最小的元素;

  • 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换

  • 从余下的n-1个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。

        选择排序的时间复杂度为O(n²),由于每次选择仅考虑某一位置上的数据情况,可能会破坏之前数据的相对位置,因此它是一种不稳定的排序方法。 例如:序列  [9,9,1]第一次就将第一个[9]与[1]交换,导致第一个9挪动到第二个9后面。

补充:简单选择排序的比较次数与序列的初始排序无关。假设待排序的序列有 n个元素。 则比较次数永远都是n(n-1)/2; 而移动次数(即:交换操作)与序列的初始排序有关,介于 0 和 (n - 1) 次之间。当序列正序时,移动次数最少,为 0。当序列反序时,移动次数最多,为n - 1 次;逆序交换n/2次。选择排序的移动次数比冒泡排序少多了,由于交换所需CPU时间比 比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

6.5冒泡排序:

  • 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素;

    (第一轮结束后,序列最后一个元素一定是当前序列的最大值)

  • 对序列当中剩下的n-1元素在执行步骤1

  • 对于长度为n的序列,一共需要执行n-1轮比较(利用while循环可以减少执行次数)

void BubbleSort (ElemType A[],int n){
//用冒泡排序将序列A中的元素按从小到大排列       
          for(i=0;ii;j--)              
                      //一趟冒泡过程                  
                   if(A[j-i].key>A[j].key){    
                           //若为逆序                        
                            swap(A[j-1],A[j]);       //交换        
                             flag=true;              
                                    }          
                           if(flag==false)       
                               return;  //本趟遍历没有发生交换,说明已经有序 
        }
}

    稳定性:冒泡排序是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。相同元素的前后顺序并没有改变,冒泡排序是一种稳定排序算法。

5.时间复杂度: O(n²)

7.基数排序(桶排序)
1.基本概念
  基数排序(Radix Sort)属于分配式排序,又称"桶子法"(Bucket Sort或Bin Sort),将要排序的元素分配到某些"桶"中,以达到排序的作用。基数排序属于稳定的排序,其时间复杂度为nlog(r)m (其中r为的采取的基数,m为堆数),基数排序的效率有时候高于其它比较性排序。

 1. 根据输入建立适当个数的桶,每个桶可以存放某个范围内的元素;
 2.将落在特定范围内的所有元素放入对应的桶中;
 3.对每个非空的桶中元素进行排序,可以选择通用的排序方法,比如插入、快排;
 4.按照划分的范围顺序,将桶中的元素依次取出。排序完成。

归并排序:


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/232170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号