题目:
小明是一个一年级小学生今天老师给小明布置了一项非常简单的题目:老师让小明2,4,7,8,3,5,9,1,0,6这十个数进行排序但小明却一点都不想做你能写一个c++的程序帮帮他吗?
提示:
插入排序
输入:
无
输出:
0 1 2 3 4 5 6 7 8 9
样例输入:
无
样例输出:
0 1 2 3 4 5 6 7 8 9
源代码及注释:
#include<iostream>//看不懂注释的请先看下面的讲解
using namespace std;
int a[]={2,4,7,8,3,5,9,1,0,6}; //建立一维数组储存老师教给小明的十个数
void i(int n)// 建立一个无类型的函数用来进行插入排序
{
for(int i=1;i<n;i++)// 把无序区间插到有序区间
{
int d=i,t=a[i];
while(d>0&&a[d-1]>t)
{
a[d]=a[d-1];
d--;
}
a[d]=t;
}
}
int main()
{
i(10);// 调用函数
for(int i=0;i<10;i++)//输出排好序的十个数
{
cout<<a[i];
cout<<" ";
}
return 0;
}
动态图:
算法步骤
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列(也就是无序序列)。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
讲解:
插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入