首页 > 其他分享 >希尔排序定性分析

希尔排序定性分析

时间:2022-11-11 23:35:53浏览次数:58  
标签:10 定性分析 插入排序 希尔 排序 过程 序数

具体希尔排序和插入排序的过程网上有不少,这里就不多说了。下面只谈个人对希尔排序为什么能突破O(n^2)的理解。

 

希尔排序算法之所以比插入排序法好,是因为它的“大跨步”比较。

 

首先,希尔排序是插入排序的改进。插入排序的的过程就是识别“逆序数”,并将其两两交换,直至“逆序数”不存在的过程,可以理解为逆序数两两交换是插入排序和希尔排序的元操作。

这里,在两个数的最终排序中,其顺序与现在的顺序不同的两个数。

 

只要在排序的过程中,逆序数是在不断消减的,就可以认为是在做“有用功”。

假如希尔排序所取的间隔为10,相比插入排序法需要10次交换逆序数,希尔排序只要一次,所以就省下了不少次数。而希尔排序的后续过程,就是把这个序列进一步有序化,不断减少逆序数。

因此希尔排序间隔大于1时,其消减逆序数的效率总是大于插入排序的。

标签:10,定性分析,插入排序,希尔,排序,过程,序数
From: https://www.cnblogs.com/chase-the-light/p/16882403.html

相关文章

  • 快速排序
    快速排序 代码实现: ......
  • 十大经典排序算法(Java)--正在更新。。
    十大经典排序算法(2022年11月11日更新)1、冒泡排序冒泡排序是接下来的十大排序中最简单的排序。1.1方法描述简单来说,排序方法就是重复地走过要排序的数列,一次比较相邻......
  • 洛谷1923 排序
    洛谷1923错误这道题用的快排,但是非常卡时间,最后将快排优化,新学stl中nth_element(数组名,数组名+第k小元素,数组名+元素个数);将第k小元素找出,最后直接输出就行//判断k......
  • String类型List排序
    一、升序:@Testpublicvoidtest1(){//创建ArrayList集合对象List<String>al=newArrayList<>();//往集合里添加数据al.add("aa");al.add("bb");......
  • sql查询二级分类按照字符串排序
    1.函数解释len()是用来计算字符串长度left()是用来截取指定部分的字符串2.sql语句:select id,pid from tborderbycase    whenpid=0thenleft('00000',5-len(id)......
  • 34. 在排序数组中查找元素的第一个和最后一个位置
    34.在排序数组中查找元素的第一个和最后一个位置classSolution{publicint[]searchRange(int[]nums,inttarget){if(nums.length==0)returnnew......
  • ListView中排序和分组(GroupTemplate)的使用实例演示
    .aspx代码如下:<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="8_Group_Sort.aspx.cs"Inherits="Group_Sort"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0......
  • Java实现算法之--选择排序
        选择排序也是比较简单的一种排序方法,原理也比较容易理解,它与冒泡排序的比较次数相同,但选择排序的交换次数少于冒泡排序。冒泡排序是在每次比较之后,若比较的两个......
  • MapReduce实战之辅助排序和二次排序案例
    辅助排序和二次排序案例1)需求有如下订单数据订单id商品id成交金额0000001Pdt_01222.80000001Pdt_0625.80000002Pdt_03522.80000002Pdt_04122.40000002Pdt_05722.40000003Pdt......
  • 冒泡排序
    publicint[]sortMaopao(int[]arry){for(inti=0;i<arry.length;i++){for(intj=0;j<arry.length-1-i;j++){......