码迷,mamicode.com
首页 > 编程语言 > 详细

c#中常见的算法(希尔排序)

时间:2020-07-12 16:46:28      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:rgs   tps   info   img   list   github   width   amp   操作   

希尔排序:也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:
1,插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;
2,但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;

希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。

算法思路:
选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;
按增量序列个数 k,对序列进行 k 趟排序;
每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

动图演示:

技术图片

c#代码实现:

public void num(int[] list) {

int num = 1;
while (num <= list.Length/9)
{
num = num * 3 + 1;
}
for (; num > 0; num = num/3)
{
for (int i = num + 1; i <= list.Length ; i += num)
{
int temp = list[i - 1];
int numone= i;
while (numone > num && list[numone - num - 1] > temp)
{
list[numone - 1] = list[numone - num - 1];
numone -= num;
}
list[numone - 1] = temp;
}
}
}
static void Main(string[] args) {

int[] count = new int[] { 456, 8, 999, 33, 123, 985, 211, 520, 250, 38 };
Program po = new Program();
po.num(count);
for (int i = 0; i < count.Length; i++)
{
Console.WriteLine(count[i]);
}
Console.ReadKey();
}

实现结果:

技术图片

   转载于:https://github.com/hustcc/JS-Sorting-Algorithm

c#中常见的算法(希尔排序)

标签:rgs   tps   info   img   list   github   width   amp   操作   

原文地址:https://www.cnblogs.com/m962263807/p/13288500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!