几种内部排序

1、插入排序:(在有序的序列中插入新的元素使其仍有序)

(a)直接插入排序:适用于待排序的长度比较小的情况:

最小的比较次数(元素非递减排列):n-1,元素不需要移动;

最大的比较次数(元素非递增排列):(n+2)(n-1)/2,移动次数:(n+4)(n-1)/2

故算法的平均时间复杂度为O(n^2)

(b)折半插入排序:在插入新的元素时,应为已有的序列时有序的,所以可以通过折半查找的方式确定待排序元素所在的位置。其时间复杂度仍未:O(n^2)

(c)希尔排序O(n^3/2):若待排序的序列时基本有序时,可以减少比较次数,由此减小时间复杂度。希尔排序基于此,将序列分成若干组后依次进行排序:如下图:

图1 希尔排序

2、快速排序(O(nlogn)):

平均时间上,是目前最好的一种内部排序方法,对冒泡排序的一种改进,冒泡排序的时间复杂度为O(n^2)。但若序列基本有序时,会退化成冒泡排序。

通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序。如下图:

图2 快速排序

3、选择排序:最小的元素需要通过比较序列中的元素中n个值外,次小的值可以基于前一次的比较,而不需要再进行n-1次比较。如:树形选择排序(nlogn),堆排序(nlogn)

图 树形选择排序

4、归并排序(O(nlogn)):

图 归并排序
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、 单项选择题(共71题) 对n个元素的序列进行冒泡排序时,最少的比较次数是( )。A. n ...
    貝影阅读 9,277评论 0 10
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,753评论 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,288评论 0 2
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,237评论 0 52
  • 鑽牆的聲音不是聒噪的 而是瑣碎的 一片的白色從上映到這片空白 以往的 現在的 完美地交互而不知其所在 膠桶的撞擊聲...
    S的河阅读 60评论 0 0