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

实现过程与原理:
对于给定的几个数,先将第一个数看做有序序列,然后将第二个数插入到有序序列中,使整个序列再次有序化,再将第三个数插入到前面的有序序列中,如此往复,即为插入排序原理。
例:
现有给定几个数: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)

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