插入排序的思想:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子陣列中的適當位置,直到全部記錄插入完成為止。
一、直接插入排序
#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 之前...
常見排序演算法之插入排序
目錄 一 簡介 二 排序思路 三 演算法實現 四 原理分析 插入排序,就是假定乙個參考值,假設該參考值左邊的元素都有序,那麼從該元素開始從後往前挨個查詢,如果找到比參考值大的數,那麼就將這個大的數後移,如果未找到比參考值大的數,說明不用移動元素。迴圈比較,經過比較後移之後就會空出乙個位置,用於存放這...