希尔排序(附C语言实现)
希尔排序是一种插入排序法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。
基本思想
不断把待排序的对象分成若干个小组,对同一小组内的对象采用直接插入法排序,当完成了所有对象都分在一个组内的排序后,排序过程结束。每次比较指定间距的两个数据项,若左边的值小于右边的值,则交换它们的位置。间距d按给定公式减少: di+1 =(di +1)/2 ,直到d等于1为止。D可以选取{9,5,3,2,1}。
算法步骤
Step1 将n个元素个数列分为5个小组,在每个小组内按直接插入法排序;
step2 在第i步,分组个数取 di+1 =(di +1)/2 {9,5,3,2,1};相临两组之间的对应元素进行比较,如果ai>aj,则交换它们的位置;
Step3 当dK = 1的循环过程完成后,排序过程结束。
希尔排序举例:设有字符数列"f d a c b e",执行Shell排序:
SHELL排序算法的描述:
算法讨论
Shell排序算法的时间复杂度分析比较复杂,实际所需的时间取决于各次排序时增量的个数和增量的取值。研究证明,若增量的取值比较合理,Shell排序算法的时间复杂度约为O(n(ldn)2)。由于Shell排序算法是按增量分组进行的排序,所以Shell排序算法是一种不稳定的排序算法。
代码
#include <iostream>
using namespace std;
void shell(int *work, int n) {int i, j, x, d;d = n / 2;while (d >= 1) {for (i = d + 1; i <= n; i++) {x = work[i];j = i - d;while ((j > 0) && (x < work[j])) {work[j + d] = work[j];j -= d;}work[j + d] = x;}d /= 2;}
}
int main() {int a[100], b, c, n, i;cout << "请输入需排序的数字个数:";cin >> n;cout << "请输入需排序的数字";for (i = 1; i <= n; i++) {cin >> a[i];}shell(a, n);cout << "从小到大排序结果为:";for (i = 1; i <= n; i++) {cout << a[i] << ' ';}system("pause");
}
希尔排序(附C语言实现)相关推荐
- 希尔排序及C语言实现
排序系列之(4)希尔排序及C语言实现 收藏 希尔排序(Shell Sort)也称为递减增量排序算法,是插入排序的一种高速而安定的改良版.因希尔(Donald L. Shell)于1959年提出而得名. ...
- 希尔排序----附图解(C语言)
目录 一.简介 二.代码部分 2.1完整代码 2.2代码输出结果 三.代码部分分析 3.1核心代码 3.2代码运行部分的过程(附图解) 四.总结 一.简介 中文名:希尔排序 英文名:Shell's S ...
- C++实现希尔排序(附完整源码)
C++实现希尔排序 希尔排序(Shell's Sort) 希尔排序源代码 希尔排序(Shell's Sort) 插入排序的一种又称"缩小增量排序"(Diminishing Incr ...
- C:希尔排序(C语言)
#include <stdio.h> #define N 10 void Shell_Sort(int *a, int n);int main(int argc, char** argv) ...
- python算法与数据结构-希尔排序算法(35)
阅读目录 一.希尔排序的介绍 二.希尔排序的原理 三.希尔排序的图解 四.希尔排序的python代码实现 五.希尔排序的C语言实现 六.希尔排序的时间复杂度 七.希尔排序的稳定性 一.希尔排序的介绍 ...
- C语言实现希尔排序shell sort算法之一(附完整源码)
希尔排序shell sort算法 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) #includ ...
- C语言实现希尔排序shell sort算法之二(附完整源码)
希尔排序shell sort算法 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) #includ ...
- 希尔排序(Shell's Sort)的C语言实现
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 希尔排序(Shell's Sort)又称"缩小增量排序"(Diminis ...
- C语言希尔排序(解析)
C语言希尔排序(解析) 网上找的移动图:
最新文章
- 【错误记录】Flutter 应用运行卡在 Running Gradle task ‘assembleDebug‘... ( 配置阿里云 Maven 仓库镜像 )
- 1.2传值、引用、常量引用
- geometry-api-java 学习笔记(二)点 Point
- 线程同步机制:互斥量、信号量、读写锁、条件变量
- java treemap_Java TreeMap HigherKey()方法与示例
- tomcat-maven-plugin 2.0版本发布
- 【python小工具】vbb文件提取json
- 2018最新老男孩Linux架构师实战课程14期视频
- 超市条码扫描枪使用前如何进行参数设置
- 拼写的能力和重要性英语作文_拼写很重要吗? 我认为是的。
- 山东理工大学ACM平台题答案 1134 数列求和
- python中单引号的作用_python里的单引号和双引号的有什么作用
- 三苯基膦(TPP)负载碘化BODIPY光敏剂(BDPI)纳米颗粒(PBDPI-TPP)介绍
- Julia语法归纳总结
- 华为彩信显示尚未激活服务器,华为手机无法接收彩信提示要开通gprs
- 「罗马人的故事 III 胜者的迷思」读后感 Part1,格拉古兄弟
- 免费H5页面制作工具大汇总
- 1503 Problem A 最简分式
- Java 代码实现 Liquibase 的基本使用方法
- 自动化篇 - 为闲鱼制作一个客服机器人