【跟我学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语言实现插入排序。

浙公网安备 33010602011771号