常見的排序演算法 插入排序

2022-05-05 07:15:12 字數 1774 閱讀 9734

插入排序的思想:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子陣列中的適當位置,直到全部記錄插入完成為止。

一、直接插入排序

#include using

namespace

::std;

//列印

void print_array(int a, int

n)//

排序void insert_sort(int a, int

n)

//放入tmp=a[i]

a[j+1] =tmp;

print_array(a, n);

}}int

main()

; cout

<< "

before sort:

"<

print_array(a, 9);

insert_sort(a, 9);

cout

<< "

after sort :

"<

print_array(a, 9);

return0;

}

輸出:

說明:直接插入排序的做法是:每次從無序表中取出第乙個元素,插入到有序表的合適位置。第一次比較前兩個數,把較大的放在後面;第二次取第三個數與前兩個數從後往前掃瞄,然後插入到合適的位置;依次下去進行了(n-1)次掃瞄完成了整個過程。

直接插入排序屬於穩定排序,最壞時間複雜性為o(n^2),空間複雜度o(1)。

二、希爾(shell)排序

#include using

namespace

std;

void print_array(int a, int

n)void shell_sort(int a, int

n)

cout

<< "

before:

"<< tmp << "";

print_array(a, 9);

a[j+h] =tmp;

cout

<< "

after :

"<< "";

print_array(a, 9);

}}

}int

main()

;

//cout << "before sort:" << endl;

print_array(a, 9

); shell_sort(a, 9);

//cout << "after sort :" << endl;

print_array(a, 9

);

return0;

}

輸出:

說明:希爾排序是插入排序的一種。是針對直接插入排序的改進。又稱為縮小增量排序,屬於不穩定排序方法。

在直接插入排序演算法中,每次插入乙個數,使有序序列只增加1個節點,且對插入的下乙個數沒有幫助。如果比較相隔較遠(增量大)的數,使得數移動能跨過多個元素,就可以避免多次交換了。

希爾排序演算法是將陣列按照增量d分成若干組,組之間對應元素進行比較,然後交換;然後將增量縮小,再次進行分組,組之間對應元素進行比較,直到增量變為1。因此希爾排序實際上是一種分組插入方法。

常見排序演算法 插入排序

插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。本節介紹兩種插入排序方法 直接插入排序和希爾排序。直接插入排序基本思想 1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r ...

常見的排序演算法 插入排序

排序 所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。穩定性 假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,r i r j 且r i 在r j 之前,而在排序後的序列中,r i 仍在r j 之前...

常見排序演算法之插入排序

目錄 一 簡介 二 排序思路 三 演算法實現 四 原理分析 插入排序,就是假定乙個參考值,假設該參考值左邊的元素都有序,那麼從該元素開始從後往前挨個查詢,如果找到比參考值大的數,那麼就將這個大的數後移,如果未找到比參考值大的數,說明不用移動元素。迴圈比較,經過比較後移之後就會空出乙個位置,用於存放這...