排序算法之希尔排序

基本思想

  希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。

  希尔排序时效分析很难,关键码的比较次数与记录移动次数依赖于增量因子序列d的选取,特定情况下可以准确估算出关键码的比较次数和记录的移动次数。目前还没有人给出选取最好的增量因子序列的方法。增量因子序列可以有各种取法,有取奇数的,也有取质数的,但需要注意:增量因子中除1外没有公因子,且最后一个增量因子必须为1。

代码实现:

  

#include<iostream>
using namespace std;void ShellInsertSort(int a[], int n, int dk)
{for (int i = dk; i<n; ++i) {if (a[i] < a[i - dk]) {          //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入  int j = i - dk;int x = a[i];          //复制为哨兵,即存储待排序元素  a[i] = a[i - dk];      //首先后移一个元素  while (x < a[j]) {     //查找在有序表的插入位置  a[j + dk] = a[j];j -= dk;            //元素后移  
            }a[j + dk] = x;           //插入到正确位置  
        }}
}
//先按增量d(n/2,n为要排序数的个数进行希尔排序
void shellSort(int a[], int n) {int dk = n / 2;while (dk >= 1) {ShellInsertSort(a, n, dk);dk = dk / 2;}
}int main() {int a[8] = { 3,1,5,7,2,4,9,6 };shellSort(a, 8);           //希尔插入排序  for (auto c : a){cout << c << " ";}cout << endl;
}

 

转载于:https://www.cnblogs.com/chmm/p/7426951.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust——Macos安装使用

进入官网会自动检测当前是什么操作系统&#xff0c;我的是Mac&#xff0c;所以使用官网给的命令安装就可以了 终端输入&#xff1a; curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh # 安装过程中&#xff0c;最后一步需要输入选择&#xff0c;输入1是继续安装…

android踩坑日记1

Android四大组件-活动、服务、广播、碎片情况一应用场景&#xff1a;定时从服务器获取数据&#xff0c;然后活动或者碎片中根据最新获得的数据&#xff0c;更新UI。思考&#xff1a; 首先定时&#xff0c;想到定时器&#xff0c;推荐使用系统自带的AlertManager&#xff0c;而它…

Go_常量、iota(枚举)的使用

常量 常量是在程序运行过程中&#xff0c;其值不可以发生改变的数据&#xff0c;常量无法被获取地址 常量中的数据类型能是布尔型、数字型&#xff08;整型、浮点型和复数型&#xff09;、字符串 常量的定义是通过const关键字完成的&#xff0c;并且常量名称大写为公开&#…

pthon_函数式编程与面向对象编程的比较

函数式编程作为结构化编程的一种&#xff0c;正在受到越来越多的重视。工程中不在只是面向对象编程&#xff0c;更多的人尝试着开始使用函数式编程来解决软件工程中遇到的问题。 什么是函数式编程&#xff1f;在维基百科中给出了详细的定义&#xff0c;函数式编程&#xff08;英…

Go_方法、方法重载

方法&#xff1a; 方法是绑定在自定义类型上的&#xff0c;常用在结构体上 方法只能通过绑定的自定义类型的变量来调用&#xff0c;方法不能直接调用&#xff0c;因为方法是和类型作关联的 方法是值拷贝的传递方式&#xff0c;如果希望改变结构体变量的值&#xff0c;需要通过…

go_命令行参数Args、flag

Args&#xff1a; os.Args是一个string的切片&#xff0c;可以存储所有的命令行参数&#xff08;在终端运行才行&#xff09;&#xff0c; func main() {args : os.Argsfor i, v : range args {fmt.Println("索引&#xff1a;", i, "\t数据&#xff1a;"…

防止sql注入的方法

防止sql注入从前端的页面到后台可以分为以下几个办法&#xff1a; 1.在前端页面就可以用js过滤数据 要引入的包&#xff1a; import Java.util.regex.*; 正则表达式&#xff1a; private String CHECKSQL “^(.)\\sand\\s(.)|(.)\\sor(.)\\s$”; 判断是否匹配&#xff1a; Pat…

使用haystack实现django全文检索搜索引擎功能

前言 django是python语言的一个web框架&#xff0c;功能强大。配合一些插件可为web网站很方便地添加搜索功能。 搜索引擎使用whoosh&#xff0c;是一个纯python实现的全文搜索引擎&#xff0c;小巧简单。 中文搜索需要进行中文分词&#xff0c;使用jieba。 直接在django项目中使…

Go_输入与输出

输出的几种方式&#xff1a; fmt.Print&#xff1a;属于标准输出流&#xff0c;一般使用它来进行屏幕输出&#xff0c;但它不能换行fmt.Printf&#xff1a;可以格式化输出&#xff0c;输出不换行fmt.Println&#xff1a;输出后换行fmt.Sprint&#xff1a;返回一个格式化的字符…

3、事件响应函数(一)

一、激活销毁 void OnEnable()//每次激活脚本时调用{print("OnEnable");}void OnDisable()//脚本取消激活状态调用{print("OnDisable");}void OnDestroy()//被销毁时调用{print("OnDestroy");} 二、鼠标事件 /// <summary>/// 代码添加到需…

人人都是产品经理?

产品经理顾名思义就是产品经理。那么只要搞懂产品是什么、经理又什么什么&#xff0c;就明白了产品经理是什么。 产品是什么&#xff1a; 产品是满足需求的载体&#xff0c;能被市场、人们使用和消费&#xff0c;并能满足人们某种需求&#xff08;创造价值&#xff09;的任何东…

搭建一个简单的FTP服务器

本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器&#xff0c;第一次装好WIN7后我愣是没整出来&#xff0c;后来查了一下网上资料经过试验后搭建成功&#xff0c;其实原理和步骤与windows前期的版本差不多&#xff0c;主要是对新的操作系统还不是很熟悉。相信用…

3D文档(BRD、MRD、PRD)怎么写

3D文档&#xff1a; 一般来说&#xff0c;BRD作为战略方向的制定&#xff0c;是最早产出的文档&#xff0c;而MRD则是在战略方向的基础上对市场进行的分析&#xff0c;同时对后续工作的方向进行一些说明和指导&#xff0c;也可以说是通过对市场环境、竞品的分析&#xff0c;明确…

需求收集、分析、管理的方法

需求&#xff1a; 什么是需求 百度百科给的解释&#xff1a;指人们在某一特定的时期内在各种可能的价格下愿意并且能够购买某个具体商品的需要。所以要想明白需求&#xff0c;还要明白另外两个概念&#xff0c;需要和欲望&#xff0c;因为从需要到需求是一个由宏观到微观的过程…

Oracle中start with...connect by子句的用法

connect by 是结构化查询中用到的&#xff0c;其基本语法是&#xff1a;select … from tablenamestart with 条件1connect by 条件2where 条件3;例&#xff1a;select * from tablestart with org_id ‘HBHqfWGWPy’connect by prior org_id parent_id;简单说来是将一个树状…

用户访谈与问卷调查怎么做

用户访谈&#xff1a; 用提问交流的方式&#xff0c;了解用户体验的过程&#xff0c;访谈内容需要根据访谈目的来确定&#xff0c;通常包括产品的使用过程、使用感受、品牌印象等&#xff0c;属于定性研究。 访谈场景&#xff1a; 接听客服电话&#xff08;轮岗&#xff0c;客服…

【hdu2825】ac自动机 + 状压dp

传送门 题目大意&#xff1a; 给你一些密码片段字符串&#xff0c;让你求长度为n&#xff0c;且至少包含k个不同密码片段串的字符串的数量。 题解&#xff1a; 因为密码串不多&#xff0c;可以考虑状态压缩 设dp[i][j][sta]表示长为i的字符串匹配到j节点且状态为sta的数量。 其…

if函数 字体自动标红_发喜糖!REPT函数和图表订婚了~~

小伙伴们早上好呀&#xff01;今天为大家分享的是REPT函数的应用实例。案例1&#xff1a;基础用法左右&#xff1a;按照给定的次数重复显示文本用法&#xff1a;REPT(文本&#xff0c;重复次数)搭配&#xff1a;Wingdings字体家族的应用案例2&#xff1a;条形图⑴ 单元格D3输入…

用户体验五要素

用户体验&#xff1a; 用户在使用产品过程中建立起来的一种纯主观感受。 用户体验的重要性&#xff1a; 会失去客户&#xff1a;如果你没有良好的体验&#xff0c;用户不会使用你的产品&#xff0c;而且产品很难有二次机会接触用户。会增加获客成本&#xff1a;获客成本越来越高…

用鼠标旋转图像

这里涉及的到图像旋转后&#xff0c;方向的计算。我也不是很明白。先记录下来再说。 #_*_coding:utf-8 _*_import pygame from pygame.locals import * from sys import exit from gameobjects.vector2 import Vector2 from math import *background_image_filename./images/se…