一个排序算法的解析

 

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

 

posted @ 2015-01-27 13:56  沧海一滴  阅读(216)  评论(0编辑  收藏  举报