Go语言希尔排序 希尔排序 java

什么是希尔排序法基本思想:
将整个无序序列分割成若干小Go语言希尔排序的子序列分别进行插入排序 。
序列分割方法:将相隔某个增量h的元素构成一个子序列 。在排序过程中Go语言希尔排序 , 逐次减小这个增量Go语言希尔排序,最后当h减到1时Go语言希尔排序,进行一次插入排序Go语言希尔排序,排序就完成 。增量序列一般采用:ht=2t-1,1≤t≤[log2n] , 其中n为待排序序列的长度 。
void prshl(p,n)
int n;double p[];
{
int k,j,i;
double t;
k=n/2;
while(k0)
{
for(j=k;j=n-1;j++)
{
t=p[j];i=j-k;
while((i=0)(p[i]t))
{
p[i+k]=p[i];i=i-k;
}
p[i+k]=t;
}
k=k/2;
}
return;
}
希尔排序(缩小增量法)
属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序
排序过程:先取一个正整数d1n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止
初始:d=5
4938659776132749*5504
|---------------|
3827
|--------------|
6549*
|--------------|
9755
|---------------|
|76-------------04|
一趟结果
d=3132749*55044938659776
|--------|--------|----------|
270465
|--------|-------|
49*4997
|--------|---------|
二趟结果
130449*38274966659776
d=1
三趟结果
0413273849*4955657697
希尔排序法中距离为d是什么意思属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序
排序过程:先取一个正整数d1n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止
初始:d=5
49 38 65 97 76 13 27 49* 55 04
49 13
|-------------------|
38 27
|-------------------|
65 49*
|-------------------|
97 55
|-------------------|
76 04
|-------------------|
一趟结果
13 27 49* 55 04 49 38 65 97 76
d=3
13 27 49* 55 04 49 38 65 97 76
13 55 38 76
|------------|------------|------------|
27 04 65
|------------|------------|
49* 49 97
|------------|------------|
二趟结果
13 04 49* 38 27 49 55 65 97 76
d=1
13 04 49* 38 27 49 55 65 97 76
|----|----|----|----|----|----|----|----|----|
三趟结果
04 13 27 38 49* 49 55 65 76 97
--------------------------------------------------------------------------------------------
例如对503,17,512,908,170,897,275,653,462,154,509,612,677,765,703,94排序的C语言算法
================================================
功能:希尔排序
输入:数组名称(也就是数组首地址)、数组中元素个数
================================================
*/
/*
====================================================
算法思想简单描述:
在直接插入排序算法中,每次插入一个数,使有序序列只增加1个节点,
并且对插入下一个数没有提供任何帮助 。如果比较相隔较远距离(称为
增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除
多个元素交换 。D.L.shell于1959年在以他名字命名的排序算法中实现
了这一思想 。算法先将要排序的一组数按某个增量d分成若干组,每组中
记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量
对它进行,在每组中再进行排序 。当增量减到1时,整个要排序的数被分成

推荐阅读