直接插入排序—C语言

直接插入排序(Insert Sort)稳定的一种排序

直接插入排序的思想:

  • 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
  • 第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。
  • 直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。

例如给定一串数字    5    3     7    8     2

                                 j      i                   

让 arr[i] 为第二个数  j 从零号下标开始向后走,如果第一个数字大于第二个数字,进行交换,否则i+1,开始进行下一次循环。

#include<stdio.h>

void InsertSort(int *arr,int len)
{
	for(int i = 1;i < len;i++)
	{
		int tmp = arr[i];
		int j = 0;
		for(j = i-1;j >= 0;j--)
		{
			if(arr[j] > tmp)
			{
				arr[j+1] = arr[j];
			}
			else
			{
				break;
			}
		}
		arr[j+1] = tmp;
	}
}

void Show(int *arr,int len)
{
	for(int i = 0;i  < len;i++)
	{
		printf("%d ",arr[i]);
	}
	printf("\n");
}

int main()
{
	int arr[] = {5,3,7,8,2};
	int len = sizeof(arr)/sizeof(arr[0]);
	InsertSort(arr,len);
	Show(arr,len);
	return 0;
}

直接插入排序的时间复杂度为O(n^2) 最好情况为O(n)越有序越快,

空间复杂度为O(1)。

发布了35 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41078889/article/details/84197236