首页 > 希尔排序 算法

希尔排序 算法

算法思路

  1. 插入排序的改进版,选择插入距离远的元素
  2. 选择一个间距,将序列分成很多子序列并行插入排序
  3. 降低间距,并重复插入元素,直到间距将为1,完成排序。

算法实现

void shell_sort(vector<int> &arr, int beg, int gap) { //gap为1时即直接插入排序for (int i = beg + gap; i< arr.size(); i += gap) { int tem = arr[i];int j = i - gap;for (;j >=0 && tem < arr[j]; j -= gap) { arr[j+gap] = arr[j];}arr[j+gap] = tem;}
}void shell(vector<int> &arr) { int gap = arr.size() / 2;while(gap > 0) { int beg = gap - 1;while(beg >=0) { //使用当前gap,将所有元素位置按照要求进行调整shell_sort(arr, beg, gap);beg --;}gap /= 2;}
}

算法分析

时间复杂度:时间复杂度和增量gap有关,当gap为1时,为直接插入排序O(n^2)

希尔排序开始时增量较大,分组较多,每组的记录数目少,各组直接插入较快

gap逐渐减小,分组减少,各组记录的数目增多,但由于已按照d[i-1]进行排序,则新的排序数组效率也很高;

希尔排序整体的时间复杂度为O(n^3/2)

空间复杂度:O(1)保存元素

更多相关:

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...

  • 一、 介绍sort命令是用来对文字内容(文档)排序使用的。同时也可以排序去重、指定字段排序,按照月份排序、按照数字排序,检查文件是否有序等等。默认情况是按照字典序排序以后标准输出到屏幕上,但是该命令不会修改原来的文档内容。sort命令通常和uniq命令以及wc命令一起使用。二、 用法sort [OPTION]... [FILE]......

  • arr.sort((prev, next) => next.排序字段 - prev.排序字段);//从大到小降序(会改变原数组)arr.sort((prev, next) => prev.排序字段 - next.排序字段);//从小到大升序(会改变原数组)...

  • 以下为我们经常用到的十大典型排序算法导图,很多设计以及优化的思想值得去参考学习 因为代码较多,所以都添加到对应的实现注释中了,相关代码可以从Mind-mapping获取xmind源文件 参考文档: 基数排序 堆排序 希尔排序 https://blog.csdn.net/real_lisa/article/details/826854...

  • 对文本操作进行排序,以行为单位,依次根据ascii值进行比较,默认的排序方式为升序 sort [-bcfMnrtk][源文件][-o 输出文件]补充说明:sort可针对文本文件的内容,以行为单位来排序。 参  数:-b 忽略每行前面开始出的空格字符。-c 检查文件是否已经按照顺序排序。-f 排序时,忽略大小...

  • 下面链接中是我用jQuery的扩展来实现的表格分页和排序,使用这个扩展必须加上表头和标签,因为我是 通过来进行分页的,要是不加thead,那么表头也要作为分页计算时的一个行了。 下载最新代码和示例:jqueryPaging.rar 使用方法如下: