A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何旭栋 中级黑马   /  2012-7-3 21:31  /  1682 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何旭栋 于 2012-7-5 02:19 编辑
  1. public void ShellSort(int[] arr) {
  2.                 int Index, Temp, x;
  3.                 int Length = arr.length;
  4.                 int DataLen = Length >> 1;
  5.                
  6.                 while (DataLen != 0) // 数列仍可进行分割
  7.                 {
  8.                         for (x = DataLen; x < Length; x++) {
  9.                                 Temp = arr[x];
  10.                                 Index = x - DataLen; // 计算进行处理的位置
  11.                                 // 进行集合内数值的比较与交换值
  12.                                 while (Index >= 0 && Temp < arr[Index]) {
  13.                                         arr[Index + DataLen] = arr[Index];
  14.                                         Index = Index - DataLen;
  15.                                 }<font color="#ff0000">//这个while循环有点看不懂,高手帮忙讲解下</font>
  16.                                 // 与最后的数值交换
  17.                                 arr[Index + DataLen] = Temp;
  18.                         }
  19.                         DataLen = DataLen >> 1; // 计算下次分割的间隔长度
  20.                 }
  21.         }
复制代码
记得毕老师讲排序时候说过希尔排序,上网找了希尔排序看看,结果看了半天没搞懂。。。

3 个回复

倒序浏览
本帖最后由 陆强强 于 2012-7-4 00:37 编辑

第一次数组折半:x和0的值比,X的值小,arr[Index + DataLen] = arr[x - DataLen+ DataLen]=arr[x]=arr[Index];
Index = Index - DataLen;然后内while结束出来arr[Index + DataLen] =arr[Index - DataLen+ DataLen]=arr[Index]=Temp;
所以Temp = arr[x];
arr[x]=arr[Index];
arr[Index]=Temp;这是什么,换位


如果x对应的值大于0角标的值,内while不进去,arr[Index + DataLen] = Temp;//arr[x-DataLen+ DataLen]]=arr[x]不换位
所以然后x+1和1的值比,x+2和2比一直下去到x=length-1和DataLen-1(数组长度为奇数,偶数时这里是DataLen)比一次;
比完DataLen再折半一次继续上面的循环
最后一次折半DataLen一定是1,然后每次都是x和x-1的值比。比完因为1》1=0所以外循环结束。得出结果。

未命名.JPG (25.34 KB, 下载次数: 31)

未命名.JPG

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 解释的不错,图文并茂,赞一个!.

查看全部评分

回复 使用道具 举报
蛋疼的论坛编辑系统害我弄了好几次
回复 使用道具 举报
本帖最后由 何旭栋 于 2012-7-5 02:24 编辑

谢谢了,终于看明白了,这个确实效率比选择排序高,就是代码实现有点复杂
断了一天网,现在要睡觉了才连接上,蛋痛啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马