使用简单排序法,实现对20个随机数([50,100])的排序,并输出原始排序数列和拍好序的数列。

首先我们先整理一下思路:

第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

运行结果:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值