基础算法1——插入排序和希尔排序

View Code
 1 //升序
 2 public class MyInsertSort {
 3     // 直接插入排序
 4     public void StraightInsertionSort(double[] sorted) {
 5         int i, j;
 6         for (i = 2; i < sorted.length; i++) {
 7             if (sorted[i] < sorted[i - 1]) {
 8                 sorted[0] = sorted[i];// 设一监视哨
 9                 sorted[i] = sorted[i - 1];
10                 for (j = i - 2; sorted[j] > sorted[0]; j--) {// 所有大于监视哨值后移
11                     sorted[j + 1] = sorted[j];
12                 }
13                 sorted[j + 1] = sorted[0];
14             }
15         }
16     }
17 
18     // 希尔排序
19     public void ShellSort(double[] sorted) {
20         int incr[] = { 7, 5, 3, 1 };
21         for (int i = 0; i < incr.length; i++) {
22             ShellInsertSort(sorted, incr[i]);
23         }
24     }
25 
26     public void ShellInsertSort(double[] sorted, int incr) {
27         // TODO Auto-generated method stub
28         int i1, j1;
29         for (i1 = 1 + incr; i1 < sorted.length; i1++) {
30             if (sorted[i1] < sorted[i1 - incr]) {
31                 sorted[0] = sorted[i1];
32                 for (j1 = i1 - incr; (sorted[j1] > sorted[0]) && j1 > 0; j1--) {
33                     sorted[j1 + incr] = sorted[j1];
34                 }
35                 sorted[j1 + incr] = sorted[0];
36             }
37         }
38     }
39     
40 }

 

posted @ 2013-05-09 16:02  路人浅笑  阅读(248)  评论(0编辑  收藏  举报