直接插入演算法:每趟將乙個待排序的關鍵字按照其值的大小插入到已經排好的部分有序序列的適當位置上,直到所有待排序的關鍵字都被插入到有序序列中為止。
理論上,在直接插入排序中第二層迴圈是可以提前結束的,即某個元素在尋找自己合適位置時並未迴圈遍歷到序列最前端。
這是直接插入排序和簡單選擇排序最大的不同。也是直接插入排序和簡單選擇排序同為時間複雜度o(n2),但是直接插入排序效率更高的原因。
尤其是在待排序資料基本有序的時候,這種優勢將極其明顯。甚至此時直接插入排序要比時間複雜度為o(nlogn)的排序演算法更加高效。
#include#include輸出結果:using
namespace
std;
template
void insertselectionsort(t arr,intn)}
intmain();
insertselectionsort(a,
10);
for(int i=0;i<10;i++)
cout
cout
<
float b[3]=;
insertselectionsort(b,3);
for(int j=0;j<3;j++)
cout
cout
<
string c[4]=;
insertselectionsort(c,4);
for(int k=0;k<4;k++)
cout
cout
<
return0;
}
但是,如果我們進行演算法效能測試,我們會發現上面的**並未將這種效率高的優勢顯示出來。
原因是在這段**中存在大量的數值交換,而每一次數值交換都包括三次賦值的操作,在本例中還包括訪問陣列索引所在位置的時間,這些是比簡單的比較耗時更多的存在。
所以我們可以對上面關鍵**進行優化。
template void insertselectionsort(t arr,int在這裡我們不再呼叫swap函式進行數值的交換,而是全都是用賦值語句完成相應的操作。n)}
就大大優化了演算法。
需要說明一下的是:對於直接插入排序,一趟排序後並不能確保乙個關鍵字到達其最終位置。
直接插入排序演算法C 實現
最近開始學習演算法導論,這篇文章就當作學習開篇了,有些簡單的演算法就只給出 實現了,詳細的介紹相信大家都能掌握,此標籤下的演算法都是以c 語言實現。演算法的偽 如下,理解下思想 insertion sort a for j 2 to a.length key a j insert a j into ...
直接插入排序演算法C 實現
演算法的偽 如下,理解下思想 insertion sort a for j 2 to a.length key a j insert a j into the sorted sequencea 1.j 1 i j 1 while i 0and a i key a i 1 a i i i 1 a i ...
實現直接插入排序演算法
實驗題目 實現直接插入排序演算法 實驗目的 領會直接插入排序的過程和演算法設計 實驗內容 設計程式,實現直接插入排序演算法。用相關資料進行測試,並 輸出各趟的排序結果。include define max len 100 最大長度 typedef int key type 定義關鍵字型別為int t...