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]+"");
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章