java实现选择排序

一、用java实现直接选择排序

1、什么是直接选择排序呢?

就好比打扑克,当你把牌都摸到手里后,开始整理先从第一张开始理,通过从第一张到最后一张比,把最小的放到最左边,以此类推。

2、优化

寻常的直接选择排序是选小的逐渐往左边排列或者选大的往右边排,为了提高效率我们不妨优化一下此类型排列,直接左右开工(最大最小同时选择)

具体代码实现如下
import java.util.Scanner;
class sq{
  public static void main(String[] arrgs){
    
    int a[]=new int[5];
    int num=a.length;
    //区间
    int begin=0;
    int end=num-1;
    Scanner sc=new Scanner(System.in);
   for(int i=0;i<a.length;i++){
      a[i]=sc.nextInt();
   }
    
    while(end>begin){
        int min=begin;
        int max=begin;
      for(int i=begin+1;i<=end;i++){
        if(a[i]<a[min]){
          min=i;
        }
        if(a[i]>a[max]){
          max=i;
        }
      }
      //
      int tmp_1=0;
      tmp_1=a[begin];
      a[begin]=a[min];
      a[min]=tmp_1;
      
      if(max==begin){
        max=min;
      }

      //
      int tmp_2=0;
      tmp_2=a[end];
      a[end]=a[max];
      a[max]=tmp_2;
      end--;
      begin++;

    }
    int tmp=0;
    for(tmp=0;tmp<num;tmp++){

     System.out.print(a[tmp]+" ");
    }
    System.out.println();
  }
}

思路:
  1. 我们先定义两个区间分别是beginend,每当我们把相对最大最小选出来,我们就缩小区间在小区间接着进行左右开弓排序,当区间满足begin>=end时我就排好顺序了。

  2. 左右开弓时我们需要定义两个变量max min分别存放每次筛选时的最大最小值,在定义变量i在不断缩小的区间里来遍历查找最大最小值

  3. 需要注意的是当我们把最小值交换到区间的第一个位置时,恰巧第一个位置又是最大值,因此我们需要在交换完最小值到最左边后,在判断一下最大值对应的max的是否是begin,如果是,那么交换后之前begin对应的值就换到了现在min的位置了,需要max=min一下。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值