首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于希尔排序,该怎么解决

2012-03-14 
关于希尔排序Java codepublic void shellInertionSort(double [] sorted, int inc){int sortedLen sorted

关于希尔排序

Java code
public void shellInertionSort(double [] sorted, int inc){         int sortedLen= sorted.length;         for(int j=inc+1;j<sortedLen;j++ ){              if(sorted[j]<sorted[j-inc]){                   sorted[0]= sorted[j];//  ①先保存一下后面的那个                                      int insertPos=j;                                   for(int k=j-inc;k>=0;k-=inc){                                            if(sorted[k]>sorted[0]){                            sorted[k+inc]=sorted[k];                                                       //数据结构课本上这个地方没有给出判读,出错:                            if(k-inc<=0){                                 insertPos = k;                            }                       }else{                            insertPos=k+inc;                            break;                       }                   }                                     sorted[insertPos]=sorted[0];                                 }         }     }     public void shellInsertionSort(double [] sorted){         int[] incs={7,5,3,1};         int num= incs.length;                  int inc=0;         for(int j=0;j<num;j++){              inc= incs[j];                        shellInertionSort(sorted,inc);                     }             }    



在这段代码中,①所在的那句,那个sorted[0]没保存就被sorted[j]覆盖掉了,原来的sorted[0]呢?

  这个例子中是从下标为1开始(第二个)那个元素开始打印,即忽略了第一个(下标为0)元素,

  但是实际情况中要是给一些数据去排序,不可能扔掉第一个不要吧!

  希望各位大侠给讲讲

[解决办法]
这个代码不全
这是因为在构建(生成)数组时

数组中的第一个(下标为0)数不会被赋值 最后也不会打印 
所以下标为0的数被用来实现临时数据存储功能
[解决办法]
建议楼主把这段代码扔掉,然后再找本好书如《程序员实用算法》
[解决办法]
是呀,你的K[J]〉=0,使得SORTED[k]有可能是0,这样会把sorted[0]给破坏掉。

[解决办法]
C/C++ code
void shillsort(int n)  {      int i,j;      int t=1;      while (t<n/4) t=t*2+1;//设置增量       while (t>0)      {          for (i=t;i<n;i++)//对每一块排序           {              j=i;              int d=a[i];              while(j>=t&&a[j-t]>d)              {                  a[j]=a[j-t];                  j-=t;              }              a[j]=d;          }          t/=2;//增量变小(即合并过程)       }  } 

热点排行