直接插入排序
题目描述
利用直接插入排序算法实现线性表的排序。要求输出第k趟排序的结果。例如原来线性表为:26,12,25,4,36,15,21,第一趟直接排序排序结果为: 12,26,25,4,36,15,21,第二趟直接插入排序结果为: 12,25,26, 4,36,15,21。
输入
输入包含若干个测试用例,第一行为测试用例个数。每个测试用例占3行,第一个为元素个数n(1<=n<=1000),第二行为n个元素值(整数),即需要排序的元素个数,第三行为k(1<=k<=n-1),即要求的第k趟排序结果。
输出
对每一测试用例,用一行输出第k趟排序结果,用空格隔开。
分析:
此题, 我初步以为是冒泡排序, 但是通过样例分析,发现并不是,所以经过思考, 我发现, 他是将第一个数和第二个数比较,如果,大于,则交换位置。并直接将第二个数(即下一个数与后面的比较)。
#include"stdio.h"
int main()
{
int k,n,a[1000],i,j,t,m,q;
while(~scanf("%d",&q))
{ while(q--)
{scanf("%d",&n);
{
m=0;
for(i=0; i<n; i++)
scanf("%d",&a[i]);
scanf("%d",&k);
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
m++;
break;
}
m++;
if(m==k)
break;
}
if(m==k)
break;
}
for(i=0; i<n-1; i++)
printf("%d ",a[i]);
printf("%d\n",a[i]);
}
}
}
}