最近把學習《算法導論》加到了自己的學習計劃,開篇第二章寫的插入排序是基礎的排序算法,其設計技術使用了增量方法,接下來歇息一下自己對插入排序的理解。
下面的代碼是對一維數組進行插入排序,時間複雜度爲O(n²),空間複雜度爲O(1);對一維數組的插入排序,其目的是將給定的一組數字進行排序,使其按照順序排列。我們可以從數組中的第二個數字作爲插入值開始進行排序,首先比較插入值(也就是第二個數字)和其之前的數(第一個數字),插入值較小,就將第一個數字放在插入值的位置,此時第一個位置是空的,前邊沒有需要比較的數字,則第一個位置就是插入值的位置;之後將第三個數字作爲插入值,開始新一輪的比較,一直循環比較到最後一個數字,結束。
#include<iostream>
using namespace std;
int main()
{
int key,j; //key是未進行排序的值
int a[5]={5,2,4,1,3}; //初始化整數類型的數組a
for(int i=1;i<5;i++) //開始排序
{
key=a[i];
j=i-1;
while(j>=0 && a[j]>key) //將較大的值往右邊移位
{
a[j+1]=a[j];
j--;
}
a[j+1]=key; //j+1即是key值應該插入的位置
}
for(int i=0;i<5;i++) //遍歷數組
{
cout<<a[i]<<",";
}
cout<<endl; //換行
return 0;
}