排序算法--希尔排序(Shell Sort)_C#程序实现
排序算法--希尔排序(Shell Sort)_C#程序实现
排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题。例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困难。同样,存储在计算机中的数据的次序,对于处理这些数据的算法的速度和简便性而言,也具有非常深远的意义。
1.基本概念
排序是把一个记录(在排序中把数据元素称为记录)集合或序列重新排列成按记录的某个数据项值递增(或递减)的序列。
2希尔排序(Shell Sort)
1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。
2.1算法描述
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:
- 选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;
- 按增量序列个数k,对序列进行k 趟排序;
- 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。
2.2动态图演示

2.3C#代码实现希尔排序
希尔排序
/// <summary>
/// 希尔排序
/// </summary>
/// <param name="array"></param>
public static int[] ShellSort(int[] array)
{
int length = array.Length;
int k = ;
for (int h = length / ; h > ; h = h / )
{
for (int i = h; i < length; i++)
{
int temp = array[i];
if (temp.CompareTo(array[i - h]) < )
{
for (int j = ; j < i; j += h)
{
if (temp.CompareTo(array[j]) < )
{
temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
}
printArray(array);
Console.WriteLine("第" + (k++) + "趟"+" 增量"+h);
}
return array;
}
打印数组
/// <summary>
/// 打印数组
/// </summary>
/// <param name="array"></param>
private static void printArray(int[] array)
{
if (array == null || array.Length <= )
{
return;
}
for (int i = ; i < array.Length; i++)
{
Console.Write("["+array[i]+"]"+",");
}
}
测试代码:
//希尔排序
int[] arrayTest4 = new int[] { , , , , , , , , };
Console.WriteLine("\n------------原数组--------------");
printArray(arrayTest4);
Console.WriteLine("\n------------希尔排序--------------");
int[] resultArray4 = ShellSort(arrayTest4);
Console.WriteLine("排序结果:");
printArray(resultArray4);
运行结果:

排序算法--希尔排序(Shell Sort)_C#程序实现的更多相关文章
- 数据结构和算法(Golang实现)(22)排序算法-希尔排序
希尔排序 1959 年一个叫Donald L. Shell (March 1, 1924 – November 2, 2015)的美国人在Communications of the ACM 国际计算机 ...
- 使用 js 实现十大排序算法: 希尔排序
使用 js 实现十大排序算法: 希尔排序 希尔排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- C数据结构排序算法——希尔排序法用法总结(转http://www.cnblogs.com/skywang12345/p/3597597.html)
希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...
- Python排序算法——希尔排序(Shell’s Sort)
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10793487.html 一.希尔排序(Shel ...
- js 实现排序算法 -- 希尔排序(Shell Sort)
原文: 十大经典排序算法(动图演示) 希尔排序 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版.它与插入排序的不同之处在于,它会优先比较距离较远的元素.希尔排序又叫缩 ...
- 八大排序算法——希尔(shell)排序(动图演示 思路分析 实例代码java 复杂度分析)
一.动图演示 二.思路分析 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. 简单插 ...
- 排序算法-希尔排序(Java)
package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className ShellSort * @date 201 ...
- JavaScript排序算法——希尔排序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java排序算法——希尔排序
package sort; //================================================= // File Name : ShellSort //------- ...
随机推荐
- 【网站管理6】_一个网站SEO优化方案
首先,前端/页编人员主要负责站内优化,主要从四个方面入手: 第一个,站内结构优化 合理规划站点结构(1.扁平化结构 2.辅助导航.面包屑导航.次导航) 内容页结构设置(最新文章.推荐文章.热门文章.增 ...
- insert /*+append*/为什么会提高性能
在上一篇的blog中 做了下使用,在归档和非归档下,做数据插入http://blog.csdn.net/guogang83/article/details/9219479.结论是在非归档模式下表设置为 ...
- 安装istio v1.0 详细过程和步骤
创建 istio 目录 [root@centos-110 ~]# mkdir istio [root@centos-110 ~]# cd istio 方案一: # 去下面的地址下载压缩包 # ...
- window Form中使用Font Awesome z
图标字体是矢量的,矢量图意味着每个图标都能在所有大小的屏幕上完美呈现,可以随时更改大小和颜色,而且不失真,真心给人一种“高大上”的感觉.由于Font Awesome是完全免费的,无论个人还是商业使用, ...
- css-animate制作列表鼠标移动覆盖透明层
效果 比列使用bootcdn加速 html <!DOCTYPE html> <!-- saved from url=(0065)javascript:; --> <htm ...
- Elasticsearch集群优化
版本配置: ES版本:6.2.4 OS内存64G. 一.参数配置: ES jvm内存31G. vi /etc/sysctl.conf vm.swappiness = 1 elasticsearch.y ...
- [转]jQuery中clone和clone(true)的区别
jquery中clone() 和 clone(true)的区别. jquery复制 DOM的时候,原来还可以连 dom上面绑定的事件一起复制. 原文: https://www.cnblogs.com/ ...
- Compiler Error: Function call with parameters that may be unsafe
如下的代码: #include <stdio.h> #include <string> #include <algorithm> #include <cass ...
- ionic andorid apk 签名, 查看签名MD5
ionic cordova build android生成的是带签名的android-debug.apk, 这个是可以在手机上安装的, 但是换个电脑打包这个签名就不一样了, 这样就不能直接替换安装了, ...
- 每天一个linux命令(12):more命令
1.命令简介 more (more) 该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比,方便逐页阅读(file perusal filter fo ...