1.定義:
(1)插入排序類似於咱們日常打撲克的時候,通常我們給牌排序時,總是將一張牌插入到其他已經有序的排中的適當位置。
(2)由(1)可知,插入排序是通過遍歷陣列,並將當前元素與前面已經排好序的元素一一比較,獲得最佳位置
(3)為了給要插入的元素騰出空間,需要將其餘所有元素在插入之前都向後移動一位。
(4)與選擇排序一樣,當前索引左邊的所有元素都是有序的,但它們的最終位置還不確定。
2.**剖析
假設:陣列a,長度n,下標i
(1)陣列從小到大遍歷。
(2)當下標索引為 i 時,比較 a[i] 與 a[i-1],若前者小於後者,則交換兩個元素的位置,之後讓 i--。
(3)迴圈第二步的操作,直到 a[i]>a[i-1],這時肯定是不交換位置了的,於是,a[i]的這個元素就已經找到了合適的位置了。
(4)如此往復,直到整個陣列遍歷結束。
我們可以看出,首先,陣列的第一位我們可以直接跳過不用做判斷處理;其次,要等到演算法跑完後,其元素的位置最終才定下來。其當前元素只要一判斷到不符合條件就直接跳過進入下乙個元素判斷了,還是比較乾脆的。
4.按照這個思路,寫出**如下:
/**
* 插入排序
* 排序過程:
* 1.陣列從小到大遍歷
* 2.將當前遍歷到的元素插入到前面已經排序好的陣列裡
* 3.插入進去後,其他元素向後排序
* 4.如此往復,直到整個陣列排序
* @param array
*/public static void insertsort(int array) }}
5.演算法優劣判斷(1)對於隨機排列的長度為n且主鍵不重複的陣列,平均情況下插入排序需要n*n/4次比較以及n*n/4次交換。最壞情況下需要n*n/2次比較和n*n/2次交換,最好情況下需要n-1次比較和0次交換
(2)適合的用該演算法的陣列:陣列中每個元素距離它的最終位置不遠;乙個有序的大陣列接乙個小陣列;陣列中只有幾個元素的位置不正確。
(3)插入排序需要的交換操作和陣列中倒置的數量相同,需要的比較次數大於或等於倒置的數量,小於等於倒置的數量加上陣列的大小再減一。(倒置:指的是陣列中的兩個順序顛倒的元素)
6.資料引用:
《演算法algorithms(第4版)》 p157~p159
java 插入排序演算法
從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素小於前面的元素 已排序 則依次與前面元素進行比較如果小於則交換,直到找到大於該元素的就則停止 如果該元素大於前面的元素 已排序 則重複步驟2 重複步驟2 4 直到所有元素都排好序 這是插入排序的...
插入排序演算法(java)
一 基本思想 將乙個資料插入到乙個有序的資料中,從而產生乙個新的 個數加一的有序資料。二 時間複雜度 插入排序演算法的時間複雜度是o n 2 三 排序過程如下 例如第一次排序 32 21,12,34,9,18,11,35 第二次排序 21,32 12,34,9,18,11,35 第三次排序 12,2...
Java排序演算法 插入排序
插入排序最簡單的排序方法之一。它是時間複雜度為o n 2 空間複雜度為o 1 的一種穩定排序演算法。基本思想 插入排序有n 1趟排序組成。假設在第p個位置的元素為待插入元素,對於p 1到p n 1趟,每一趟保證從位置到位置p的元素已經處於有序狀態。一開始預設a 0 為已排序陣列中的元素,從arr 1...