首先我们先整理一下思路:
第1趟简单排序找出最小数,与a[0]交换;
第2趟简单排序找出次小数,与a[1]交换;
第3趟简单排序找出第3小数,与a[2]交换;
以此类推
最终在第19趟简单排序找出倒数第2小的数,与a[18]交换;
最后排序完成!
代码:
int[] data=new int[20];
int i,j,min,t;
System.out.print("原始数列是: ");
for(i=0;i<20;i++) {
data[i]=(int)(51*Math.random()+50);
System.out.print(data[i]+" ");
}
for(i=0;i<19;i++) {
min=data[i];
for(j=i+1;j<20;j++) {
if(data[j]<min) min=data[j];
if(min!=data[i]) {
t=data[i];data[i]=min;data[j]=t;
}
}
}
System.out.print("\n排序后的数列是: ");
for(i=0;i<20;i++) {
System.out.print(data[i]+" ");
}
注:过程中注意逻辑错误
错误案例
int[] data=new int[20];
int i,j,min,t;
System.out.print("原始数列是: ");
for(i=0;i<20;i++) {
data[i]=(int)(51*Math.random()+50);
System.out.print(data[i]+" ");
}
for(i=0;i<19;i++) {
min=data[i];
for(j=i+1;j<20;j++) {
if(data[j]<min) min=data[j];
}
if(min!=data[i]) {
t=data[i];data[i]=min;min=t;
}
}
System.out.print("\n排序后的数列是: ");
for(i=0;i<20;i++) {
System.out.print(data[i]+" ");
}
以上代码中有逻辑问题:
第二个for循环中出现逻辑问题,将第二个if放到for循环中,这三个语句是为了交换data[i]和data[j]的值,中间用了t做中间键,但是没有把原本data[i]的值赋给data[j],并将min=t,改为data[j]=t
运行结果: