基本思想:以第一個元素爲基準,後面的元素依次與第一個元素比較,若比它大,則不執行操作,若比它小,則插入到它的左邊。
原理:
1.這裏的第一個元素爲12,因此以12作爲基準,利用後面的元素與它進行比較。因此最外層循環應爲for(i=1;i<length;i++)。當i=1時,比較a[i]和a[i-1],即與它前面的一個元素進行比較,若a[i]>a[i-1]則表明當前元素大於前一個元素,不執行任何操作。若a[i]<a[i-1]表明當前元素小於前一個元素,需要進行移動插入。此時將a[i]放入temp臨時變量中。
2.此時進入第二層循環,j=i-1,該循環不斷向左移動j,比較j中的元素a[j]與temp值,如果temp<a[j],則a[j+1] = a[j]。
3.內層循環第一輪結束,j--。j變爲-1,跳出循環。此時a[j+1]=temp;
4.外層循環i++,i變爲2。比較a[i]與a[i-1]。若a[i]<a[i-1]則將a[i]放入temp中。
5.進入內層循環for(j=i-1;j>00&&temp<a[j];j--) 中,將a[j]與temp比較。如果temp<a[j],則將a[j+1]=a[j]。
6。當j<0或者temp>a[j],則跳出循環,將temp變量放置在a[j+1]處。
void InsertSort(int list[], int n)
{
int j;
for (int i = 1; i < n; i++)
{
if (list[i] < list[i - 1])
{
int temp = list[i];
for (j = i - 1; j >= 0 && temp < list[j]; j--)
{
list[j + 1] = list[j];
}
list[j + 1] = temp;
}
}
}
int main()
{
int list[] = { 12, 5, 4, 6, 7, 6, 1 };
InsertSort(list, sizeof(list) / sizeof(int));
for (int i = 0; i < sizeof(list) / sizeof(int); i++)
{
cout << list[i] << endl;
}
}
插入排序是一種穩定的排序算法,最好情況下的時間複雜度:,最壞情況下的時間複雜度爲:,平均情況下的時間複雜度爲。空間複雜度爲。