排序算法--希尔排序(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. angular清除select空格

    <select   class="form-control"   id="policy_set_id"   ng-model="add.poli ...

  2. Install latest git on CentOS 6/7

    Assuming you have sudo/root permission. Try rpmforge-extras first. yum --disablerepo=base,updates -- ...

  3. ajax01

    ajax01 1.ajax简介 涉及AJAX的操作页面不能用文件协议访问 使用ajax发送请求: send参数缺省默认为null onreadyatatechange事件在状态改变时就会触发. .re ...

  4. 常见爬虫/BOT对抗技术介绍(一)

    爬虫,是大家获取互联网公开数据的有效手段.爬虫.反爬虫技术.反-反爬虫技术随着互联网的不断发展,也在不断发展更新, 本文简要介绍现代的爬虫/BOT对抗技术,如有疏漏,多谢指正! 一.反爬虫/BOT技术 ...

  5. 【Kibana】自定义contextPath

    #https://www.elastic.co/guide/en/kibana/5.0/_configuring_kibana_on_docker.html#https://discuss.elast ...

  6. iOS NSDictionary 转Json 去掉换行去掉空格

    //dic 转json 如果用系统自带的会出现空格. + (NSString *)returnJSONStringWithDictionary:(NSDictionary *)dictionary{ ...

  7. C#读取Excel文件的简单方法

    一.简述 本文讲C#通过第三方库读取Excel的最简单的方法,下文给一个读取行数的例子. 二.依赖 引入nuget.org包如下: <?xml version="1.0" e ...

  8. php 日期处理 DateTime

    获取所有的时区: print_r(timezone_abbreviations_list ()); 获取毫秒级时间戳 // php7.1+ always has microseconds enable ...

  9. PowerShe 消息提示框测试

    1. 使用powerShell 弹出一个简单的消息框,代码如下,创建test.ps1脚本文件. $ConfirmPreference = 'None' $ws = New-Object -ComObj ...

  10. GPL、BSD、MIT、Mozilla、Apache、LGPL开源协议介绍

    BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布. 但”为所欲为”的前提当你发布使 ...