排序算法(二)

 1 /**
 2  * 03/09/2014
 3  * @author Burke
 4  *
 5  */
 6 public class ShellSort {
 7     
 8     public static int[] a = {49,38,65,97,76,13,27,49,55,04};
 9     
10     public static void main(String[] args) {
11         int i;
12         int index = a.length;
13         
14         System.out.print("排序前:");
15         for(i = 0; i < index; i++){
16             System.out.printf("%3s ",a[i]);
17         }
18         System.out.println("");
19         
20         shellSort(index);
21         
22         System.out.print("排序后:");
23         for(i = 0;i < index; i++)
24             System.out.printf("%3s ",a[i]);
25         System.out.println("");
26     }
27     public static void shellSort(int index){
28         int  i, j, k;
29         int temp;
30         boolean change;
31         int dataLength;
32         int pointer;
33         //index为数组长度
34         //dataLength为增量,刚开始为数据长度的一半
35         dataLength = (int) index / 2;
36         
37         while(dataLength != 0){
38             //从后往前
39             for( j = dataLength; j < index; j++){
40                 change = false;
41                 temp = a[j];//开始j=dataLength为每组数据的第二个数
42                 pointer = j - dataLength;
43                 /*
44                  * 下面9行为:对每组数据进行插入排序。按照递增的顺序
45                  */
46                 //从后往前寻找插入的位置,将数组往后移动
47                 while(temp < a[pointer] && pointer >= 0 && pointer <= index){
48                     a[pointer + dataLength] = a[pointer];//数组后移
49                     pointer = pointer - dataLength;//将比较的指针前移
50                     change = true;
51                     if (pointer<0 || pointer > index) {
52                         break;
53                     }
54                 }
55                 a[pointer + dataLength] = temp;//插入到正确的位置
56                 
57                 if(change){
58                     System.out.print("排序中:");
59                     for (k = 0; k < index; k++) {
60                         System.out.printf("%3s ",a[k]);
61                     }
62                     System.out.println("");
63                 }
64             }
65             dataLength = dataLength / 2;
66         }
67     }
68 }
69 /*
70  * 结果:
71  * 排序前: 49  38  65  97  76  13  27  49  55   4 
72  * 排序中: 13  38  65  97  76  49  27  49  55   4 
73  * 排序中: 13  27  65  97  76  49  38  49  55   4 
74  * 排序中: 13  27  49  97  76  49  38  65  55   4 
75  * 排序中: 13  27  49  55  76  49  38  65  97   4 
76  * 排序中: 13  27  49  55   4  49  38  65  97  76 
77  * 排序中:  4  27  13  55  49  49  38  65  97  76 
78  * 排序中:  4  27  13  49  49  55  38  65  97  76 
79  * 排序中:  4  27  13  49  38  55  49  65  97  76 
80  * 排序中:  4  13  27  49  38  55  49  65  97  76 
81  * 排序中:  4  13  27  38  49  55  49  65  97  76 
82  * 排序中:  4  13  27  38  49  49  55  65  97  76 
83  * 排序中:  4  13  27  38  49  49  55  65  76  97 
84  * 排序后:  4  13  27  38  49  49  55  65  76  97 
85  */

 

posted @ 2014-03-09 20:53  soul390  阅读(234)  评论(0)    收藏  举报