![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }