排序算法--希尔排序(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#程序实现的更多相关文章

  1. 数据结构和算法(Golang实现)(22)排序算法-希尔排序

    希尔排序 1959 年一个叫Donald L. Shell (March 1, 1924 – November 2, 2015)的美国人在Communications of the ACM 国际计算机 ...

  2. 使用 js 实现十大排序算法: 希尔排序

    使用 js 实现十大排序算法: 希尔排序 希尔排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  3. C数据结构排序算法——希尔排序法用法总结(转http://www.cnblogs.com/skywang12345/p/3597597.html)

    希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...

  4. Python排序算法——希尔排序(Shell’s Sort)

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10793487.html 一.希尔排序(Shel ...

  5. js 实现排序算法 -- 希尔排序(Shell Sort)

    原文: 十大经典排序算法(动图演示) 希尔排序 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版.它与插入排序的不同之处在于,它会优先比较距离较远的元素.希尔排序又叫缩 ...

  6. 八大排序算法——希尔(shell)排序(动图演示 思路分析 实例代码java 复杂度分析)

    一.动图演示 二.思路分析 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. 简单插 ...

  7. 排序算法-希尔排序(Java)

    package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className ShellSort * @date 201 ...

  8. JavaScript排序算法——希尔排序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Java排序算法——希尔排序

    package sort; //================================================= // File Name : ShellSort //------- ...

随机推荐

  1. centos7.4 python3.6 Anaconda3 的下安装tensorflow

    参考这个博客 https://blog.csdn.net/learn_tech/article/details/79861683 在anaconda环境下,安装tensorflow 2018年04月0 ...

  2. linux 下令chmod 755的意思

    linux 命令chmod 755的意思 chmod是Linux下设置文件权限的命令,后面的数字表示不同用户或用户组的权限. 一般是三个数字:第一个数字表示文件所有者的权限第二个数字表示与文件所有者同 ...

  3. 如何修改IE浏览器的User-Agent用户代理字符串信息

    每款浏览器都有一个专属的 User-Agent 字符串信息, 通过 User-Agent 网站可以检测用户所使用的浏览器版本.某些网站为了让用户获得更好的浏览体验,通过检测用户的浏览器版本,以确认用户 ...

  4. 基于Token的身份认证 与 基于服务器的身份认证

    基于Token的身份认证 与 基于服务器的身份认证 基于服务器的身份认证 在讨论基于Token的身份认证是如何工作的以及它的好处之前,我们先来看一下以前我们是怎么做的: HTTP协议是无状态的,也就是 ...

  5. SSH error ( Read from socket failed: Connection reset by peer ) and it's solution

    SSH error ( Read from socket failed: Connection reset by peer ) and it's solution ssh cann't connect ...

  6. webstorm intelliJ IDEA phpstorm 设置鼠标滚动改变字体大小

    control+shift+A功能可以搜索对应功能,把mouse:Change font size(Zoom) ...的按钮打开,然后就可以通过 ctrl+鼠标上下滚动调节字体大小

  7. mingw 构建 gdal 2.1.2

    目录 1.准备 2.生成Makefile 3.编译 4.编译遇到错误及解决办法 1.生成静态库时候ar提示参数列表太长 2.生成动态库时候g++提示参数列表太长 前两日有人在oschian上问我min ...

  8. users-and-groups-in-linux

    https://www.tecmint.com/compress-files-and-finding-files-in-linux/ https://www.tecmint.com/manage-us ...

  9. 【小工具】根据定义的白名单字段进行Bean的拷贝

    背景 Bean的拷贝一直有一些类可以使用,比如Apache的org.apache.commons.beanutils.BeanUtils或者Spring的org.springframework.bea ...

  10. 10款基于jquery的web前端动画特效

    1.jQuery横向手风琴图片切换动画 之前我们为大家分享过很多款基于jQuery和CSS3的手风琴菜单和手风琴焦点图插件,比如CSS3响应式垂直手风琴菜单和jQuery横向手风琴图片展示插件.今天要 ...