插入排序(Java)

2021-08-19 15:12:00 字數 1198 閱讀 2631

最簡單的排序演算法之一。

插入排序由n-1趟排序組成,對於p=0到n-1趟,插入排序保證從位置0到位置p上的元素為已排序狀態,插入排序利用了這樣的事實:已知位置0到p-1上的元素已經處於排過序的狀態,

上圖表達了一般的策略,在第p趟,我們將位置p上的元素向左移動,直到它在前p+1個元素中的正確位置被找到,上圖顯示了這種策略。

public

class insersort

array[i] = temp;}}

public

static

void main(string args) ;

insertionsort(array);

system.out.println(arrays.tostring(array));}}

上面**第二個for迴圈實現資料移動而沒有明顯地使用交換,位置p上的元素儲存於temp,而(在p之前)所有更大的元素都被向右移動乙個位置,然後temp被置於正確的位置上。這是與在二叉堆實現時所用到的相同技巧。

因為巢狀迴圈每一次都花費n次迭代,因此插入排序為o(n²),而且這個界是精確的,因為反序的輸入可以達到該界限,精確機選指出。上面**迴圈中的元素的比較次數對於p的每個值最多是p+1次,對所有p求和得到總數為:

另一方面,如果輸入資料已預先排序,那麼執行時間為o(n),因為內層for迴圈的檢測總是立即判斷不成立而終止,事實上,如果輸入幾乎被排序,那麼插入排序將執行很快,由於這種變化差別很大。因此值得我們去分析該演算法平均 情形的行為。和其他排序演算法一樣,插入排序的平均情形也是o(n²),因此在平均情形下,直接插入排序法比冒泡和簡單選擇排序的效能要好一些。

以上面**的陣列為例

第一趟排序後:【8, 34】, 64, 51, 32, 21

第二趟排序後:【8, 34, 64】, 51, 32, 21

第三趟排序後:【8, 34, 51, 65】, 32, 21

第四趟排序後:【8, 32, 34, 51, 64】, 21

第五趟排序後:【8, 21, 32, 34, 51, 64】

從p=1的位置開始,比較0和1的大小排序,然後每次插入p++的位置,在和前面的進行比較,這個時候前面的是已經拍過序的,如果最新插入的p比前面的都大,那麼就不需要交換。

插入排序(Java)

演算法思想 每趟將乙個待排序的關鍵字,按照其關鍵字值的大小插入到已經排好的部分序列的適當位置上,直到插入完成。演算法 static void insertion sort int unsorted unsorted j temp public static void main string arg ...

java插入排序

簡單的講就是把乙個數字放在一串已經排好順序的陣列中,放進去後還要使得陣列排序完整。那麼,就是1找位置,2填數字。這就是我的思路。下面是插入排序的類 package algorithm public class insertion sort return key public void display...

插入排序 java

插入排序是一種簡單且高效的比較排序演算法。在每次迭代過程中演算法隨機的從輸入序列中移出乙個元素,並將該元素插入待排序列的正確位置。重複該過程,知道所有的輸入元素都被選擇一次。優點 實現簡單。資料量較少時效率高。適應性 如果輸入序列已經與排序 可能是不完全的預排序 則時間複雜度為o n d d是反轉的...