题目描述
插入排序算法实现。
输入
第一行是待排序数据元素的个数;
第二行是待排序的数据元素。
输出
一趟直接插入排序算法结果。
样例输入
10
50 36 41 19 23 4 20 18 12 22
样例输出
36 50 41 19 23 4 20 18 12 22
//参考教材383页,教材是大根堆,修改少量代码即可换为小根堆
//大根堆排序后,值从小到大
//小根堆排序后,值从大到小
#include<stdio.h>
#include<malloc.h>
#define MaxSize 1000
void InsertSort(int R[],int n)
{
int i,j,tmp;
for(i=1;i<n;i++)
{
if(R[i]<R[i-1])
{
tmp=R[i];
j=i-1;
do//持续后移,直到遇到<=tmp的数
{
R[j+1]=R[j];
j--;
}while(j>=0&&R[j]>tmp);
//把tmp插在<=tmp数的后面,使有序区从小到大排序
R[j+1]=tmp;
}
break;//题目要求只进行一趟排序
}
}
int main()
{
int R[MaxSize],n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&R[i]);
}
InsertSort(R,n);
for(int i=0;i<n;i++)
{
printf("%d ",R[i]);
}
}