插入排序

/**
 * 插入排序 
 * @author Administrator
 *
 */
public class InsertSortTest {
    public static void main(String[] args) {
        //测试数据
        int[] array ={1,8,56,7,3,34,54,2};
        //排序前
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+",");
        }
        System.out.println();
        //排序
        insertSort(array,true);
        //排序后
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+",");
        }
    }
    /**
     * 
     * @param array
     * @param desc true为 升序,false为降序
     */
    private static void insertSort(int[] array, boolean desc) {
        int len = array.length;
        int key;
        int i;
        for (int j = 1; j < len; j++) {
            key = array[j];
            i = j - 1;
            while (i >= 0 && (desc ? array[i] > key : array[i] < key)) {
                array[i+1] = array[i];
                i = i-1;
            }
            array[i+1] = key;
        }
    }
}

老实说,这个我不知道怎么写备注.

放到程序里调试一遍就知道原理了..

按照我的想法.举个生活中的例子..

有10张牌,都是牌面朝下..

j=1; i=0; 

第一次,右手拿第二张key,左手拿第一张array[i],第一张如果比第二张大,则放到第二张位置...

j=2; i=1; key =array[j];

第一次,右手拿第三张key,左手拿第二张array[i],第二张如果比第三张大,则放到第三张位置...然后key再跟第一张比较...

 

解释得连自己也看不懂,自己挖掘吧...

posted @ 2012-05-10 15:52  时生  阅读(162)  评论(0编辑  收藏  举报