排序算法(二)————插入排序

實現過程與原理:
對於給定的幾個數,先將第一個數看做有序序列,然後將第二個數插入到有序序列中,使整個序列再次有序化,再將第三個數插入到前面的有序序列中,如此往復,即爲插入排序原理。
例:
現有給定幾個數:21 39 18 16,請使用插入排序將它們從小到大排序
解:
21 39 18 16 現將21看作是有序序列,我們將39插入並排序
第一趟:將39插入
39大於21 故排序後:
21 39 18 16

第二趟: 21 39 18 16 前兩個元素已經成爲有序序列,我們將18插入並排序
18小於21且18小於39,故將39後移,再將21後移,並將18插入到第一個位置
排序後結果爲:
18 21 39 16

第三趟:18 21 39 16 前三個元素已經成爲了有序序列,這時我們將16插入並排序
16小於它們三者,故將39,21,18分別後移,第一個位置空出來給16,將16插入
排序後結果爲:
16 18 21 39
到此爲止,排序完畢
最後結果爲:16 18 21 39

代碼實現如下:

#include <stdio.h>

void InsertSort(int arr[], int m)
{
	for (int i = 1;i < m;i++)
	{
		int key = arr[i];
		while (arr[i - 1] > key)
		{
			arr[i] = arr[i - 1];
			i--;
			if (i == 0)
			{
				break;
			}
		}
		arr[i] = key;
	}
}

int main()
{
	int arr[6] = { 36,55,14,63,82,81 };
	InsertSort(arr,6);
	for (int i = 0;i < 6;i++)
	{
		printf_s("%d", arr[i]);
	}
}

時間複雜度:
最複雜的情況:剛好和我們要的結果排序相反:1+2+3+…+(m-1)=m*(m-1)/2 時間複雜度爲O(n2)
最簡單的情況:剛好和我們要的結果排序方式相同:n-1 時間複雜度爲O(n)
平均時間複雜度:O(n2)

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