java数据结构60:选择排序

60:选择排序

总时间限制: 

100ms

 

内存限制: 

32767kB

描述

选择排序输出的是对n个元素的原序列的一个重排<a0,a1,a2,...,an-1>;,使得a0<= a1<= a2<= .......<= an-1

选择排序思想

n个元素的直接选择排序可经过n-1趟直接选择排序得到有序结果:

①初始状态:无序区为R[0..n-1],有序区为空。

②第1趟排序

在无序区R[0..n-1]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[0]交换,使R[0..0]和R[1..n-1]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

……

③第i趟排序

第i趟排序开始时,当前有序区和无序区分别为R[0..i-1]和R[i..n-1]。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R[i]交换,使R[0..i]和R[i+1, n-1]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

输入一个整数序列,请输出选择排序每趟排序的结果。

输入

输入有2行,第一行是一个整数n,表示第2行会有n个整数。

输出

输出对第2行的n个整数每趟选择排序的结果。

样例输入

8
75 23 64 32 54 91 89 17

样例输出

17 23 64 32 54 91 89 75 
17 23 64 32 54 91 89 75 
17 23 32 64 54 91 89 75 
17 23 32 54 64 91 89 75 
17 23 32 54 64 91 89 75 
17 23 32 54 64 75 89 91 
17 23 32 54 64 75 89 91 

提示

n个整数,选择排序应该执行 n - 1 趟。

 

实现代码如下:

import java.util.Scanner;

/**
 * @author baikunlong
 * @date 2020/6/22 22:25
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] nums=new int[n];
        for (int i = 0; i < n; i++) {
            nums[i]=scanner.nextInt();
        }
        for (int i = 0; i < n-1; i++) {
            int min=nums[i];
            int index=-1;
            for (int j = i+1; j < n; j++) {
                if(min>nums[j]){
                    min=nums[j];
                    index=j;
                }
            }
            if(index!=-1){
                int t=nums[i];
                nums[i]=min;
                nums[index]=t;
            }
            for (int j = 0; j < nums.length-1; j++) {
                System.out.print(nums[j]+" ");
            }
            if(i!=n-2){
                System.out.print(nums[nums.length-1]+"\n");
            }else {
                System.out.print(nums[nums.length-1]+"");
            }
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值