1. 程式人生 > >排序--直接插入排序

排序--直接插入排序

按元素由小到大排列,直接插入排序主要過程如下:選取一個元素,從已經有序的序列的最後一個元素開始由後向前查詢插入的位置,如果該元素<前面的元素則交換位置,直到該元素>=前面的元素。如對5、4、3、2、1排序過程如下:

1、    由於4<5,則序列變成4、5、3、2、1,比較次數為1次,交換次數為1次;

2、    4、3、5、2、1;3、4、5、2、1,比較次數為2次,交換次數為2次;

3、    3、4、2、5、1;3、2、4、5、1;2、3、4、5、1,比較次數為3次,交換次數為3次;

4、    2、3、4、1、5;2、3、1、4、5;2、1、3、4、5;1、2、3、4、5,比較次數為4次,交換次數為4次;

此時也是最壞的時間複雜度為,交換次數也是一樣;但如果給定的是一個基本有序的序列比如3、2、4、5、1,此時只需要比較7次,交換5次,比最壞情況要好一點。最好的情況是比如給定有序序列1、2、3、4、5,此時只需比較N-1次,交換0次。

直接插入排序是穩定的,就是因為由後向前查詢插入的位置,比如3、3、4、5、1,第二個3不會跑到第一個3前面去。

 

由於直接插入排序的序列基本有序的時候會比最壞時間複雜度要好,也就是比選擇排序的時間複雜度好,雖然交換次數比選擇排序多,但是時間複雜度的權重比交換次數權重高

,所以直接插入排序的效率會比選擇排序快點。