常見排序算法:插入排序算法

基本思想:以第一個元素爲基準,後面的元素依次與第一個元素比較,若比它大,則不執行操作,若比它小,則插入到它的左邊。 

原理:

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;
	}
}

插入排序是一種穩定的排序算法,最好情況下的時間複雜度:O(n),最壞情況下的時間複雜度爲:O(n^{2}),平均情況下的時間複雜度爲O(n^{2})。空間複雜度爲O(1)

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章