C 语言Shell 排序
来源:互联网 发布:网络情缘陈星 编辑:程序博客网 时间:2024/06/07 15:20
void shell_sort(int v[], int n)
{
int gap, i, j, temp;
for (gap = n/2; gap > 0; gap /= 2)
{
printf ("gap = %d\n", gap);
for (i = gap; i < n; i++)
{
printf ("gap = %d,i = %d\n",gap, i);
for (j = i-gap; j >= 0 ; j -= gap)
{
printf("gap = %d,i = %d, j = %d: v[%d] <-> v[%d]\n", gap, i, j, j, j + gap);
if (v[j] > v[j + gap])
{
temp = v[j];
v[j] = v[j + gap];
v[j + gap] = temp;
}
}
}
}
}
int main()
{
int i;
int v[] = {5, 10, 18, 3, 6, 12, 7, 9, 5};
shell_sort(v, 9);
for (i = 0; i < 9; i++)
{
printf (" %d ", v[i]);
}
return 0;
}
运行结果如下, 通过查看运行结果,是不是发现 shell 元素之间的比较有一定的规律呢?
gap = 4,i = 4
compare count is 1, gap = 4,i = 4, j = 0: v[0] <-> v[4]
gap = 4,i = 5
compare count is 2, gap = 4,i = 5, j = 1: v[1] <-> v[5]
gap = 4,i = 6
compare count is 3, gap = 4,i = 6, j = 2: v[2] <-> v[6]
gap = 4,i = 7
compare count is 4, gap = 4,i = 7, j = 3: v[3] <-> v[7]
gap = 4,i = 8
compare count is 5, gap = 4,i = 8, j = 4: v[4] <-> v[8]
compare count is 6, gap = 4,i = 8, j = 0: v[0] <-> v[4]
gap = 2
gap = 2,i = 2
compare count is 7, gap = 2,i = 2, j = 0: v[0] <-> v[2]
gap = 2,i = 3
compare count is 8, gap = 2,i = 3, j = 1: v[1] <-> v[3]
gap = 2,i = 4
compare count is 9, gap = 2,i = 4, j = 2: v[2] <-> v[4]
compare count is 10, gap = 2,i = 4, j = 0: v[0] <-> v[2]
gap = 2,i = 5
compare count is 11, gap = 2,i = 5, j = 3: v[3] <-> v[5]
compare count is 12, gap = 2,i = 5, j = 1: v[1] <-> v[3]
gap = 2,i = 6
compare count is 13, gap = 2,i = 6, j = 4: v[4] <-> v[6]
compare count is 14, gap = 2,i = 6, j = 2: v[2] <-> v[4]
compare count is 15, gap = 2,i = 6, j = 0: v[0] <-> v[2]
gap = 2,i = 7
compare count is 16, gap = 2,i = 7, j = 5: v[5] <-> v[7]
compare count is 17, gap = 2,i = 7, j = 3: v[3] <-> v[5]
compare count is 18, gap = 2,i = 7, j = 1: v[1] <-> v[3]
gap = 2,i = 8
compare count is 19, gap = 2,i = 8, j = 6: v[6] <-> v[8]
compare count is 20, gap = 2,i = 8, j = 4: v[4] <-> v[6]
compare count is 21, gap = 2,i = 8, j = 2: v[2] <-> v[4]
compare count is 22, gap = 2,i = 8, j = 0: v[0] <-> v[2]
gap = 1
gap = 1,i = 1
compare count is 23, gap = 1,i = 1, j = 0: v[0] <-> v[1]
gap = 1,i = 2
compare count is 24, gap = 1,i = 2, j = 1: v[1] <-> v[2]
compare count is 25, gap = 1,i = 2, j = 0: v[0] <-> v[1]
gap = 1,i = 3
compare count is 26, gap = 1,i = 3, j = 2: v[2] <-> v[3]
compare count is 27, gap = 1,i = 3, j = 1: v[1] <-> v[2]
compare count is 28, gap = 1,i = 3, j = 0: v[0] <-> v[1]
gap = 1,i = 4
compare count is 29, gap = 1,i = 4, j = 3: v[3] <-> v[4]
compare count is 30, gap = 1,i = 4, j = 2: v[2] <-> v[3]
compare count is 31, gap = 1,i = 4, j = 1: v[1] <-> v[2]
compare count is 32, gap = 1,i = 4, j = 0: v[0] <-> v[1]
gap = 1,i = 5
compare count is 33, gap = 1,i = 5, j = 4: v[4] <-> v[5]
compare count is 34, gap = 1,i = 5, j = 3: v[3] <-> v[4]
compare count is 35, gap = 1,i = 5, j = 2: v[2] <-> v[3]
compare count is 36, gap = 1,i = 5, j = 1: v[1] <-> v[2]
compare count is 37, gap = 1,i = 5, j = 0: v[0] <-> v[1]
gap = 1,i = 6
compare count is 38, gap = 1,i = 6, j = 5: v[5] <-> v[6]
compare count is 39, gap = 1,i = 6, j = 4: v[4] <-> v[5]
compare count is 40, gap = 1,i = 6, j = 3: v[3] <-> v[4]
compare count is 41, gap = 1,i = 6, j = 2: v[2] <-> v[3]
compare count is 42, gap = 1,i = 6, j = 1: v[1] <-> v[2]
compare count is 43, gap = 1,i = 6, j = 0: v[0] <-> v[1]
gap = 1,i = 7
compare count is 44, gap = 1,i = 7, j = 6: v[6] <-> v[7]
compare count is 45, gap = 1,i = 7, j = 5: v[5] <-> v[6]
compare count is 46, gap = 1,i = 7, j = 4: v[4] <-> v[5]
compare count is 47, gap = 1,i = 7, j = 3: v[3] <-> v[4]
compare count is 48, gap = 1,i = 7, j = 2: v[2] <-> v[3]
compare count is 49, gap = 1,i = 7, j = 1: v[1] <-> v[2]
compare count is 50, gap = 1,i = 7, j = 0: v[0] <-> v[1]
gap = 1,i = 8
compare count is 51, gap = 1,i = 8, j = 7: v[7] <-> v[8]
compare count is 52, gap = 1,i = 8, j = 6: v[6] <-> v[7]
compare count is 53, gap = 1,i = 8, j = 5: v[5] <-> v[6]
compare count is 54, gap = 1,i = 8, j = 4: v[4] <-> v[5]
compare count is 55, gap = 1,i = 8, j = 3: v[3] <-> v[4]
compare count is 56, gap = 1,i = 8, j = 2: v[2] <-> v[3]
compare count is 57, gap = 1,i = 8, j = 1: v[1] <-> v[2]
compare count is 58, gap = 1,i = 8, j = 0: v[0] <-> v[1]
3 5 5 6 7 9 10 12 18
- C 语言Shell 排序
- shell排序-c语言
- C语言SHELL排序算法
- C语言写的Shell排序算法。
- c语言数组--Shell排序算法
- Shell排序算法及C语言实现
- 算法 c语言 shell希尔排序
- 排序(4)---------希尔(shell)排序(C语言实现)
- C语言:冒泡排序、选择排序、快速排序、插入排序、“shell”法
- C语言-数据结构-希尔排序(shell sort)-源代码
- C语言程序----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- shell排序C实现
- shell与C语言
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- shell排序(Java语言)
- C语言排序:冒泡排序
- c语言排序,冒泡排序
- shell排序的c实现
- 蓝点杯 打印整数划分问题
- javascript:浮动div,可拖拽div,遮罩层(div和iframe实现)
- POCO NotificationQueue Sample疑问
- 计算几何之凸包
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
- C 语言Shell 排序
- 短信发送--短信发送流程--应用层
- 数据库笔记六——存储过程
- ipv6地址解读---子网掩码
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- 【解决方案】ItemsControl删除元素,但仍然显示它们
- linux内核中符号地址的获取
- 股票的亏与赚
- android start up flow