原代码如下:
#include"stdio.h"
#define SIZE 10
main()
{int a[SIZE]={3,8,7,6,5,0,1,2,9,4};
int min,pos;
int i,j;
printf("数组中存放数据是:\n");
for(i=0;i<SIZE;i++)
printf("%d ",a[i]);
for(i=0;i<SIZE-1;i++)
{min=a[i];
pos=i;
for(j=i+1;j<SIZE;j++)
if(a[j]<min)
{min=a[j];
pos=j;
}
a[pos]=a[i];
a[i]=min;
printf("\n经过第%d次排序后,数组变为:\n",i+1);
for(j=0;j<SIZE;j++)
printf("%d ",a[j]);
}
}
运行结果如下:
数组中存放数据是:
3 8 7 6 5 0 1 2 9 4
经过第1次排序后,数组变为:
0 8 7 6 5 3 1 2 9 4
经过第2次排序后,数组变为:
0 1 7 6 5 3 8 2 9 4
经过第3次排序后,数组变为:
0 1 2 6 5 3 8 7 9 4
经过第4次排序后,数组变为:
0 1 2 3 5 6 8 7 9 4
经过第5次排序后,数组变为:
0 1 2 3 4 6 8 7 9 5
经过第6次排序后,数组变为:
0 1 2 3 4 5 8 7 9 6
经过第7次排序后,数组变为:
0 1 2 3 4 5 6 7 9 8
经过第8次排序后,数组变为:
0 1 2 3 4 5 6 7 9 8
经过第9次排序后,数组变为:
0 1 2 3 4 5 6 7 8 9
[Process completed - press Enter]
#include"stdio.h"//头文件
#define SIZE 10//宏定义,SIZE=10
main()//主函数
{
int a[SIZE]={3,8,7,6,5,0,1,2,9,4};//d定义数组,长度为SIZE,也就是10。注意数组的下标是从0开始的
int minn,pos;//min是一个系统函数,尽量不要作变量名
int i,j;//i和j可以不再循环外定义
printf("数组中存放数据是:\n");
for(i=0;i<SIZE;i++)//输出这个数组
printf("%d ",a[i]);//以上应该不用多说
for(i=0;i<SIZE-1;i++)//从第一个循环到倒数第二个
{
//首先要明白选择排序的工作原理(或者说是思路):
//1、第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置;
//2、然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾;
//3、以此类推,直到全部待排序的数据元素的个数为零。
minn=a[i];//让minn存放数组中的第一个元素,方便与后面的元素比较
pos=i;//记录最小值的下标
for(j=i+1;j<SIZE;j++)//从第i+1个往后循环
//从i+1开始的原因:第i个元素不需要与自己比较
if(a[j]<minn)//发现一个元素比当前最小值小
{
minn=a[j];//更新最小值
pos=j;//记录下标
}
a[pos]=a[i];//把最小值与第i个交换
a[i]=minn;//让第i个数成为包含它的剩下的数中的最小值
printf("\n经过第%d次排序后,数组变为:\n",i+1);//因为i是从0开始的,所以要输出i+1
for(j=0;j<SIZE;j++)
printf("%d ",a[j]);//输出排序后的数组
}
return 0;//结束。要养成加return 0的好习惯(别问我为什么)
}