所謂排序,無非就是把一個無序的序列排成一個有序的序列,從本文開始,將着重介紹經典的一些排序算法。
插入排序,是指將待排序列中的數,一個一個插入到適當位置的過程。說起算法的概念來,總是讓人摸不着頭腦,還是從生活中的例子來理解吧。相信每個人都玩過牌,我們在開始摸牌的時候,左手是空的,牌面朝下放到桌子上,接着,一次從桌子上摸起一張牌,並將它插入到左手一把牌中的正確位置上,為了找到這張牌的正確位置,要將它與手中已有的每一張牌從右到左地進行比較,無論什么時候,左手中的牌都是排好序的,而這些牌原先都是桌子上那副牌里最頂上的一些牌。
於是,根據以上的算法分析,可以寫出以下的Java代碼。
1 /** 2 * 插入排序算法 3 * 4 * @param A 5 * int數組 6 * @param isInc 7 * 是否升序,true為升序,false為降序 8 */ 9 private void InsertSort(int[] A, boolean isInc) { 10 int len = A.length; 11 int key = 0; 12 int i = 0; 13 for (int j = 1; j < len; j++) { 14 key = A[j]; 15 i = j - 1; 16 while (i >= 0 && (isInc ? A[i] > key : A[i] < key)) { 17 A[i + 1] = A[i]; 18 i = i - 1; 19 } 20 A[i + 1] = key; 21 } 22 }
從算法的機理可以看出,該算法是原地排序的,而且其算法復雜度為O(n2)。