黑马程序员技术交流社区
标题:
希尔排序
[打印本页]
作者:
s526349668
时间:
2014-7-8 12:15
标题:
希尔排序
本帖最后由 s526349668 于 2014-7-8 20:02 编辑
这个到底具体怎么排的哦
public static void main (String[]args){
int[]a={49,38,65,97,76,13,27,49,78,34,12,64,1};
System.out.println("排序之前:");
for(inti=0;i<a.length;i++){
System.out.print(a
+"");
}
//希尔排序
intd=a.length;
while(true){
d=d/2;
for(intx=0;x<d;x++){
for(inti=x+d;i<a.length;i=i+d){
inttemp=a
;
intj;
for(j=i-d;j>=0&&a[j]>temp;j=j-d){
a[j+d]=a[j];
}
a[j+d]=temp;
}
}
if(d==1){
break;
}
}
System.out.println();
System.out.println("排序之后:");
for(inti=0;i<a.length;i++){
System.out.print(a
+"");
}
}
作者:
依然阿邦
时间:
2014-7-8 18:33
本帖最后由 依然阿邦 于 2014-7-8 19:46 编辑
把过程打印出来不就能看懂了
public class ShellText
{
public static void main (String[]args)
{
int[] arr={49,38,65,97,76,13,27,49,78,34,12,64,1};
System.out.println("排序前的序列为:");
speak(arr);
//希尔排序
int d=arr.length;
while(true)
{
d=d/2;
for(int x=0;x<d;x++)
{
for(int i=x+d;i<arr.length;i=i+d)
{
int temp = arr
;
int j;
for(j=i-d;j>=0&&arr[j]>temp;j=j-d)
{
arr[j+d]=arr[j];
}
arr[j+d]=temp;
System.out.print("排序步骤"+" d="+d+" x="+x+" ");
speak(arr); //显示排序过程
}
}
if(d==1){
break;
}
}
System.out.println("排序之后:");
speak(arr);
}
public static void speak(int[] arr) //定义一个打印数组的方法
{
for(int x = 0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]);
}
}
}
运行结果
排序前的序列为:
49,38,65,97,76,13,27,49,78,34,12,64,1
排序步骤 d=6 x=0 27,38,65,97,76,13,49,49,78,34,12,64,1
排序步骤 d=6 x=0 1,38,65,97,76,13,27,49,78,34,12,64,49
排序步骤 d=6 x=1 1,38,65,97,76,13,27,49,78,34,12,64,49
排序步骤 d=6 x=2 1,38,65,97,76,13,27,49,78,34,12,64,49
排序步骤 d=6 x=3 1,38,65,34,76,13,27,49,78,97,12,64,49
排序步骤 d=6 x=4 1,38,65,34,12,13,27,49,78,97,76,64,49
排序步骤 d=6 x=5 1,38,65,34,12,13,27,49,78,97,76,64,49
排序步骤 d=3 x=0 1,38,65,34,12,13,27,49,78,97,76,64,49
排序步骤 d=3 x=0 1,38,65,27,12,13,34,49,78,97,76,64,49
排序步骤 d=3 x=0 1,38,65,27,12,13,34,49,78,97,76,64,49
排序步骤 d=3 x=0 1,38,65,27,12,13,34,49,78,49,76,64,97
排序步骤 d=3 x=1 1,12,65,27,38,13,34,49,78,49,76,64,97
排序步骤 d=3 x=1 1,12,65,27,38,13,34,49,78,49,76,64,97
排序步骤 d=3 x=1 1,12,65,27,38,13,34,49,78,49,76,64,97
排序步骤 d=3 x=2 1,12,13,27,38,65,34,49,78,49,76,64,97
排序步骤 d=3 x=2 1,12,13,27,38,65,34,49,78,49,76,64,97
排序步骤 d=3 x=2 1,12,13,27,38,64,34,49,65,49,76,78,97
排序步骤 d=1 x=0 1,12,13,27,38,64,34,49,65,49,76,78,97
排序步骤 d=1 x=0 1,12,13,27,38,64,34,49,65,49,76,78,97
排序步骤 d=1 x=0 1,12,13,27,38,64,34,49,65,49,76,78,97
排序步骤 d=1 x=0 1,12,13,27,38,64,34,49,65,49,76,78,97
排序步骤 d=1 x=0 1,12,13,27,38,64,34,49,65,49,76,78,97
排序步骤 d=1 x=0 1,12,13,27,34,38,64,49,65,49,76,78,97
排序步骤 d=1 x=0 1,12,13,27,34,38,49,64,65,49,76,78,97
排序步骤 d=1 x=0 1,12,13,27,34,38,49,64,65,49,76,78,97
排序步骤 d=1 x=0 1,12,13,27,34,38,49,49,64,65,76,78,97
排序步骤 d=1 x=0 1,12,13,27,34,38,49,49,64,65,76,78,97
排序步骤 d=1 x=0 1,12,13,27,34,38,49,49,64,65,76,78,97
排序步骤 d=1 x=0 1,12,13,27,34,38,49,49,64,65,76,78,97
排序之后:
1,12,13,27,34,38,49,49,64,65,76,78,97
作者:
ss903855792
时间:
2014-7-8 20:46
你这个程序, int temp = arr;
这里直接把数组赋给int型,不会报错吗?
作者:
ss5619498
时间:
2014-7-8 20:52
排序最好理解的方法,就是当程序的for循环在执行的时候,每走一步,去在草稿纸中画出来,光看结果,回头昏的,走完一个FOR循环,就好理解了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2