【跟我学c,掌握编程敲门砖】八大排序之插入排序

1.插入排序

在这里插入图片描述
紫色是下标。

给大家画了一张图,插入,就像打扑克牌一样,新手可能一开始是直接拿一把牌,然后一个一个对比插入。插入排序也是一样,我们必须从一个特定位置开始,与前面的位置依次比较,然后就可以按照我们的想法来排序,上面的图排的是升序。

意思我们大概是明白了,那我们呢,琢磨一下代码:

首先我们需要把这个插入逻辑写好:

void InsertSort(int* arr, int n)
{
	int end = 0;
	int temp = arr[end + 1];
	if (arr[end] > temp)
	{
		arr[end + 1] = arr[end];
		arr[end] = temp;
	}
	else 
	{
		;
	}
}

上述还是比较简单的逻辑,我们需要控制它这个处于一个数组范围内的循环,才能达到我们的要求。

void InsertSort(int* arr, int n)
{
	int end = 0;
	
	while (end >= 0)
	{
		int temp = arr[end + 1];
		if (arr[end] > temp)
		{
			arr[end + 1] = arr[end];
			arr[end] = temp;
		}
		else
		{
			;
		}
		end--;
	}
}

可能有人到这里就觉得结束了,那我们来运行一下,看看是不是结束了?
在这里插入图片描述
怎么回事?

怎么就后面还是无序?

我们发现上述的代码只能插入end+1之前的下标,使之有序,所以我们还要定一个量,使end可以变化。

void InsertSort(int* arr, int n)
{
	for (int i = 0;i < n - 1;i++)
	{
		int end = i;
		while (end >= 0)
		{
			int temp = arr[end + 1];
			if (arr[end] > temp)
			{
				arr[end + 1] = arr[end];
				arr[end] = temp;
			}
			else
			{
				;
			}
			end--;
		}
	}
}
int main()
{
	int arr[] = { 9,8,7,6,5,4,3,2,1 };
	InsertSort(arr, sizeof(arr) / sizeof(arr[0]));
	for (int i = 0;i < sizeof(arr) / sizeof(arr[0]);i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

结果:
在这里插入图片描述
这个就是c语言实现插入排序。

posted @ 2021-08-08 10:28  zbossz  阅读(57)  评论(0)    收藏  举报