前两篇跟大家讲了C/C++基础数组排序的选择排序和冒泡排序,现在再给大家分享一下插入排序算法:
插入排序
其实插入排序跟我们军训排队一样的,军训排队一般是按各人身高排的,个矮的站前面,个高的站后面:

他的操作是:将一个数插入到其他已经有序的数组中适当的位置(按一定规则)比如排队,他就需要站在一个比他矮的人后面但是比他高的人前面的位置,然后为了给他挪出来一个位置,他后面的人是不是都应该要挪开一个位置呢?
还是假设我们有一个数组{50,26,74,60,12,1,100},我们要怎么做呢?

如上图,我首先取数组第一个(50)组成一个现有队列,然后逐一再从原始序列中取出数据插入到现有队列中适当位置,这样只需要(数组长度-1)次循环就可以完成工作。
我们看下代码怎么实现:

看下运行结果,确认下有没有问题:

OK,没有问题。
其实插入排序的核心就是:将元素插入已有序列,逐一跟现有序列元素比较,然后满足比较条件的就换位置,知道找到自己合适的位置。
最后奉上源代码:
#include
#include
using namespace std;
int main()
{
int arr[7] = {50,26,74,60,12,1,100};
//從第二個元素開始去插入,所以從i=1開始
for (int i = 1; i < sizeof(arr)/sizeof(int); i++)
{
//这个循环就是我在图示中表示的过程,最大的从前往后滚
for (int j = i; j >0; j--)
{
if(arr[j]
{
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp ;
}
}
}
//我们来输出一下看看排序成功没
for (int i = 0; i < sizeof(arr)/sizeof(int); i++)
{
cout<
}
system("pause");
return 0 ;
}