插入排序可以分為:直接插入排序和希爾排序(已知元素,找位置)
1.直接插入排序
原理:將乙個未排序陣列分為無序區和有序區,不斷將無序區的第乙個元素按照大小插入到有序區,最後直到無序區的元素都插入到有序區,排序完成。
**實現:
for(int i = 1; i < a.length; i++)a[j+1] =currentvalue;
}}
分析:穩定(無跳躍),空間複雜度o(1),時間複雜度【最佳o(n),平均、最差o(n*n)】 優點:適用於(1)陣列基本有序(2)資料量小
2.希爾排序(直接插入排序的改進演算法,利用了它的兩個優點)
原理:將資料按照不同的增量(步長)分成多個組,對每個組分別進行直接插入排序。當剛開始元素很無序的時候,增量最大,分的組最多,每個組內進行直接插入排序的元素最少,速度很快;當元素基本有序時(小的在前,大的在後),增量很小,直接插入排序對於基本有序的序列效率很高。
**實現:
for(int gap = a.length / 2; gap >= 1; gap /= 2)a[j] =tmp;
}}
分析:不穩定(有跳躍,交換的時候後面的可能到前面了),空間複雜度o(1),時間複雜度【取決於增量的選取,在o(nlogn)~o(n*n)之間】
演算法 一 插入排序
插入排序演算法類似於玩撲克時抓牌的過程,玩家每拿到一張牌都要插入到手中已有的牌裡,使之從小到大排好序。撲克牌的插入排序 也許你沒有意識到,但其實你的思考過程是這樣的 現在抓到一張7,把它和手裡的牌從右到左依次比較,7比10小,應該再往左插,7比5大,好,就插這裡。為什麼比較了10和5就可以確定7的位...
排序演算法(一) 插入排序
首先,對排序演算法 輸入 n 個數 輸出 序列的乙個排序,使得a1 a2 an 待排序的數為key 插入排序演算法,是乙個對少量元素進行排序的有效演算法.其偽 如圖 插入排序演算法在形式上類似於我們平時打牌時,邊抽牌邊整理撲克牌的順序,我們將新的牌與手中已經整理好順序的撲克牌進行比較,最終將抽到的牌...
排序演算法(一) 插入排序
一 插入排序 直接插入 二分插入 希爾排序 基本思想 從前面已經排序好的資料中查詢合適的位置,將待排序資料插入到該位置 從後面向前找合適的位置 1 直接插入排序 基本思想 從右向左查詢 從左邊已排序好的資料中查詢合適的位置,插入待排序的資料。private static void derictins...