插入排序演算法

2021-07-27 14:15:03 字數 2042 閱讀 3820

想想一下我們在玩鬥地主時起牌的過程。手裡的牌從小到大排列,然後每次摸一張新牌,都會直接插入到它相應的位置。這個過程比較類似插入排序。當然,演算法都是要在特定的資料結構中進行的,排序一般在陣列中進行。我們假設現在你的手中有13張牌,順序混亂,我們要用一種固定的演算法將這13張牌排好序,可以這樣做:

從第二張牌開始,跟第一張相比,如果第一張比較大,則將第一張放到第二張的位置,並把第二張放到第一張的位置

處理第三張:假設第三張牌是n。跟第二張比,如果第二張大於n,則將第二張放到第三個位置。如果第一張大於n,則將第一張放到地二個位置。然後,將n這張牌放到最左邊那張被移動過的牌的位置。

處理第四張:假設第四張牌是n。跟第三張比,如果第三張牌大於n,則將第三張牌放到第四個位置。跟第二張比,如果第二張大於n,則將第二張放到第三個位置。如果第一張大於n,則將第一張放到地二個位置。一旦發現某個位置小於或等於n,則停止向左對比。最後,將n這張牌放到最左邊那張被移動過的牌的位置。如果沒有一張牌被移動,則第四張牌也原地不動。

……以同樣的方法來處理至最後一張排,整把牌就排好序了。

以上就是插入排序在陣列中移動的軌跡。請詳細閱讀並思考第2和第三步。

下面用c#語言來描述

static

void insertionsort(int array)

array[j + 1] = key;

}}

為了更加清晰地看出陣列中的內容的變化,我們加入下面的乙個方法來列印出整個陣列

static

void printarray(int arrya)

console.writeline();

}

然後建立乙個陣列並呼叫insertionsort方法

int myarray = ;

insertionsort(myarray);

console.writeline("排序後");

printarray(myarray);

執行程式的輸出結果為:

開始排序

第1圈開始前為:

3, 2, 5, 101, 21, 6, 1,

本圈迴圈要排序的key為2

第2圈開始前為:

2, 3, 5, 101, 21, 6, 1,

本圈迴圈要排序的key為5

第3圈開始前為:

2, 3, 5, 101, 21, 6, 1,

本圈迴圈要排序的key為101

第4圈開始前為:

2, 3, 5, 101, 21, 6, 1,

本圈迴圈要排序的key為21

第5圈開始前為:

2, 3, 5, 21, 101, 6, 1,

本圈迴圈要排序的key為6

第6圈開始前為:

2, 3, 5, 6, 21, 101, 1,

本圈迴圈要排序的key為1

排序後1, 2, 3, 5, 6, 21, 101,

讀者可以仔細對比一下輸出的結果和上面撲克牌排序的描述文字

下面是完整的**

class program

; insertionsort(myarray);

console.writeline("排序後");

printarray(myarray);

}static

void insertionsort(int array)

圈開始前為:", i);

printarray(array);

key = array[i];

console.writeline("本圈迴圈要排序的key為" + key);

int j = i - 1;

while (j >= 0 && array[j] > key)

array[j + 1] = key;}}

static

void printarray(int arrya)

console.writeline();

}}

插入排序演算法

插入排序演算法 思想 把排序過程看作是序列單個有序擴充套件為整體有序的過程,即首先取序列第二個元素與第乙個元素比較,將其插入合適位置,再將第三個元素與前兩個元素比較,將其插入合適位置,如此進行,直到最後取第n個元素與前n 1個元素進行比較並將其插入合適位置。演算法 建立日期 2004 12 14 插...

演算法 插入排序

include include 插入排序 n 2為的效率。具體思想 將陣列分為兩部分,一部分是有序的,一部分為無序的 然後從無序中選取乙個數插入在有序的數中的恰當的位置,以此迭代,直到無序的數全部遍厲完畢 void insert sort int a,int n a j tmp break retu...

插入排序演算法

下面這段話摘自 一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 將...