排序算法--希尔排序(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. flask内容学习第三天(flak中的csrf跨站请求)

    问题一:什么是csrf? 英文全称Cross Site Request Forgery(跨站请求伪造): 通俗来讲就是攻击者盗用你的身份,冒用你的名义发出恶意请求,包括发送邮件,电话信息,甚至于转账或 ...

  2. lettcode21. Merge Two Sorted Lists

    lettcode21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The ne ...

  3. GMA Round 1 相交

    传送门 相交 在实数范围内,设抛物线$C_1:y^2=2x$,双曲线:$C_2:\frac{y^2}{b^2}-\frac{x^2}{a^2}=1$(a,b为参数). 假如a和b都在(0,16)这个区 ...

  4. PHP07

    PHP07 1.cookie 2.使用php操作cookie 设置响应头(header)中的Set-Cookie可以下发小票 检查-network-响应头处可查看所设置cookie 检查-applic ...

  5. Aizu0121 Seven Puzzle(bfs+康托展开)

    https://vjudge.net/problem/Aizu-0121 比八数码要水的多,bfs. 但是做的时候我把康托展开记错了,wa了好几次. 附上康托展开博客详解:https://blog.c ...

  6. Java全栈程序员之07:IDEA中使用MAVEN构架生产级的Web项目

    在上一篇我们介绍了如何在IDEA中使用MAVEN,以及如何创建依赖等.那么在这一篇中,我们就试图搭建一个生产级的解决方案,大家可以使用这个解决方案作为骨架代码来搭建自己的开发环境. 在这里,我们要完成 ...

  7. spring mvc \ spring boot 允许跨域请求 配置类

    用@Component 注释下,随便放个地方就可以了 package com.chinaws.wsarchivesserver.core.config; import org.springframew ...

  8. CAS的单点登录和oauth2的最大区别

    CAS的单点登录时保障客户端的用户资源的安全 oauth2则是保障服务端的用户资源的安全 CAS客户端要获取的最终信息是,这个用户到底有没有权限访问我(CAS客户端)的资源. oauth2获取的最终信 ...

  9. 无法解析依赖项。“Microsoft.Net.Http 2.2.29”与 'Microsoft.Net.Http.zh-Hans

    无法解析依赖项.“Microsoft.Net.Http 2.2.29”与 'Microsoft.Net.Http.zh-Hans 2.0.20710 约束: Microsoft.Net.Http (= ...

  10. (原)visual studio 2015中添加dll路径

    转载请注明出处: https://www.cnblogs.com/darkknightzh/p/9922033.html 使用vs2015调用opencv 3.4时,除了需要在“VC++目录”中”包含 ...