选择排序
,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。
输入格式:
输入在第1行中给出N(1<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔,并保证数字没有重复的出现。
输出格式:
给出选择排序每一遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。注意:当排序完成时应立即停止
。
输入样例1:
7
4 5 7 6 3 2 1
输出样例1:
1 5 7 6 3 2 4
1 2 7 6 3 5 4
1 2 3 6 7 5 4
1 2 3 4 7 5 6
1 2 3 4 5 7 6
1 2 3 4 5 6 7
输入样例2:
5
1 2 3 5 4
输出样例2:
1 2 3 4 5
代码长度限制16 KB 时间限制400 ms 内存限制64 MB
代码:
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[100];
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;++i)
{
int flag=0;
int min=i;// 用min保存最小的数的下标,假设第一个最小
for(int j=i+1;j<n;++j)
{
if(a[j]<a[min])
{
min=j;
flag=1;
}
}//此时不要着急交换位置
if(i!=min)
{
//交换,把最小的数放前面已经有序的部分的最后面
int t;
t=a[i];
a[i]=a[min];
a[min]=t;
}
//输出中间结果数列
if(flag==1)
{
for(int h=0;h<n-1;h++)
{
printf("%d ",a[h]);
}
printf("%d\n",a[n-1]);
}
}
return 0;
}