【算法竞赛宝典】插入排序
- 题目描述
- 伪代码
- 代码展示
- 代码讲解
题目描述
伪代码
代码展示
//插入排序数,请自己根据例程修改
#include <iostream>
using namespace std;
int main() {
int a[11] = {1, 4, 6, 9, 13, 16, 19, 28, 40, 100};
int temp1, temp2, number, end, i, j;
cin >> number;
if (number > a[9])
a[10] = number;
else {
for (i = 0; i < 10; i++)//从左往右扫描
{
if (a[i] > number)//找到比插入数大的数时
{
temp1 = a[i];//将该数先暂存到temp1
a[i] = number;//把插入数插入
for (j = i + 1; j < 11; j++)//后面的数依次后移
{
temp2 = a[j];//后移时,先将a[j]的值暂存到temp2
a[j] = temp1;//插入数
temp1 = temp2;//temp2的值存到temp1,继续下一次的插入
}
break;
}
}
}
for (i = 0; i < 11; i++)
cout << a[i] << ' ';
return 0;
}
代码讲解
这段代码实现了插入排序算法,将一个数字插入已排序的数组中并保持数组的有序性。以下是代码的关键思路和步骤:
-
首先,定义一个已排序的数组
a
,其中包含了初始的已排序元素。 -
从标准输入中读取一个新的数字
number
,这是要插入到已排序数组中的数字。 -
首先,检查
number
是否大于已排序数组中的最大值a[9]
。如果number
大于最大值,则直接将其放在数组的最后一位a[10]
,因为它比已排序数组中的所有元素都大,不需要进行进一步的比较。 -
如果
number
不大于最大值,则需要找到适当的位置将其插入已排序数组中。这通过以下方式实现:- 使用一个循环遍历已排序数组
a
,从左向右扫描。 - 当找到一个比
number
大的元素a[i]
时,将a[i]
暂存到temp1
。 - 将
number
放入a[i]
的位置,然后开始后面的数依次后移,以为插入number
腾出位置。 - 在插入
number
后,循环结束。
- 使用一个循环遍历已排序数组
-
最后,输出排序后的数组
a
,包括新插入的元素。
这段代码会确保插入 number
后的数组仍然保持有序,并将结果输出到标准输出。这是插入排序算法的基本思路,它在已排序数据上的插入操作是其关键特点。