排序演算法 之插入排序(直接插入排序 希爾排序)

2021-08-04 00:27:56 字數 809 閱讀 6681

一、排序演算法分為:

1.插入排序(直接插入排序&希爾排序)

2.交換排序(氣泡排序&快速排序)

3.選擇排序(直接選擇排序&堆排序)

4.歸併排序

二、下面這張圖對排序演算法的時間複雜度&空間複雜度&穩定性做了乙個總結:

二(1)、插入排序-----直接插入排序

1.演算法**(公升序)

//直接插入排序

void insertsort(int *a,size_t n)

else

}a[end+1] = tmp;//若最小的數在最後乙個,end會--到-1, }}

//測試**

void printarray(int* a,size_t n)

else

break;

}a[end+gap] = tmp;//end會--到-3

} }}

//測試**

void printarray(int* a,size_t n)

{ for(size_t i=0;i

最好的情況:由於希爾排序的好壞與gap有關,目前還沒有計算出結果

最壞的情況:時間複雜度為o(n*logn)

平均情況:   時間複雜度為o(n*logn)

3、穩定性(看相同元素的位置)

希爾排序:不穩定

由於多次插入排序,我們知道一次插入排序是穩定的,不會改變相同元素的相對順序,但在不同的插入排序過程中,相同的元素可能在各自的插入排序中移動,最後其穩定性就會被打亂,所以shell排序是

不穩定的。

排序演算法 插入排序之直接插入排序

直接插入排序的核心思想是把乙個記錄插入乙個有序序列中,每插入乙個記錄就得到乙個新的有序序列,直到所有記錄都插入成功,得到有序序列。每次插入記錄時的有序序列如何得到,關鍵在第一次,第一次要插入的記錄時序列的第二個值,有序序列只有乙個值,就是第乙個記錄。a j 1 x j 1就是要插入的位置 print...

排序演算法 插入排序 直接插入排序

package 插入排序 直接插入排序 從後向前找到合適位置後插入 穩定 基本思想 每步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置 從後向前找到合適位置後 直到全部插入排序完為止。public class 直接插入排序 system.out.println 排序之前 fo...

排序演算法 插入排序 直接插入排序

當插入第i i 1 個元素時,前面的v 0 v i 1 等i 1個 元素已經有序。這時,將第i個元素與前i 1個元素v i 1 v 0 依次比較,找到插入位置即將v i 插入,同時原來位置上的元素向後順移。在這裡,插入位置的查詢是順序查詢。直接插入排序是一種穩定的排序演算法,其實現如下 public...