一个排序算法的解析
int[] source = { 8, 9, 10, 7, 6, 10, 20, 5, 21 };
public static void sort(int[] list) { for (int i = 1; i < list.length; i++) { int baseNumber = list[i]; System.out.print("i="+i+",baseNumber="+baseNumber+".Result:"); int j=i; for (; j - 1 >= 0; j--) { if (list[j - 1] > baseNumber) { list[j] = list[j - 1]; } else { break; } } if (i > j) { list[j] = baseNumber; } travelArray(list); } }
Output:
i=1,baseNumber=9.Result:8,9,10,7,6,10,20,5,21, i=2,baseNumber=10.Result:8,9,10,7,6,10,20,5,21, i=3,baseNumber=7.Result:7,8,9,10,6,10,20,5,21, i=4,baseNumber=6.Result:6,7,8,9,10,10,20,5,21, i=5,baseNumber=10.Result:6,7,8,9,10,10,20,5,21, i=6,baseNumber=20.Result:6,7,8,9,10,10,20,5,21, i=7,baseNumber=5.Result:5,6,7,8,9,10,10,20,21, i=8,baseNumber=21.Result:5,6,7,8,9,10,10,20,21, 5,6,7,8,9,10,10,20,21,
分析:
原理:在以前排序的基础上再排序
代码分析
排序前两个元素8,9:取下标1的值为baseNumber,为9,下标1前面有元素8,9>8,不需要换位,break。前两个元素8,9现在有序的
排序前三个元素8,9,10:取下标2的值为baseNumber,为10,下标2前面有元素9,10>9,不需要换位,break。前三个元素8,9,10现在是有序的
排序前四个元素8,9,10,7:取下标3的值为baseNumber,为7,
下标3前面有元素10,7<10,需要换位,得到8,9,10,10
下标2前面有元素9,7<9,需要换位,得到8,9,9,10
下标1前面有元素8,7<8,需要换位,得到8,8,9,10
下标为0时,循环结束。
将baseNumber,为7,赋给下标为0的位置,得到7,8,9,10