選擇排序


選擇排序原理:

  從待排序的元素中選出最小(大)的元素放在起始位置,然后再從剩余的元素中選出最小(大)的元素放在已排好的部分之后,直到只剩最后一個待排序的元素為止.

示例:

  例如數組[47,38,96,72,88,24],按照升序進行排序,排序過程如下:

  第一輪:

    47>38,交換位置,數組變為[38,47,96,72,88,24];

    38<96,不交換位置;

    38<72,不交換位置;

    38<88,不交換位置;

    38>24,交換位置,數組變為[24,47,96,72,88,38];

    第一輪之后,最小的元素到達初始位置,數組變為[24,47,96,72,88,38].

  第二輪:

    47<96,不交換位置;

    47<72,不交換位置;

    47<88,不交換位置;

    47>38,交換位置,數組變成[24,38,96,72,88,47];

    第二輪之后,剩余元素的最小者到達已排序部分之后,數組變成[24,38,96,72,88,47].

  第三輪:

    96>72,交換位置,數組變成[24,38,72,96,88,47];

    72<88,不交換位置;

    72>47,交換位置,數組變成[24,38,47,96,88,72];

    第三輪之后,剩余元素的最小者到達已排序部分之后,數組變成[24,38,47,96,88,72].

  第四輪:

    96>88,交換位置,數組變成[24,38,47,88,96,72];

    88>72,交換位置,數組變成[24,38,47,72,96,88];

    第四輪之后,剩余元素的最小者到達已排序部分之后,數組變成[24,38,47,72,96,88].

  第五輪:

    96>88,交換位置,數組變成[24,38,47,72,88,96];

    第五輪之后,剩余元素的最小者到達已排序部分之后,數組變成[24,38,47,72,88,96].

  至此,數組元素排序就完成了,排序后的數組變成[24,38,47,72,88,96].

結論:

  由上面的排序過程可以看出,6個元素只需要(元素數-1)輪排序,每輪排序只進行(元素數-輪數)次比較.

java代碼實現:

  

package com.yg.study;

public class SelectionSort {

    public static void main(String[] args) {
        int[] arr= {47,38,96,72,88,24};
        doSort(arr);
        System.out.println("===============排序后的數組為==============");        //可以刪除
        for (int i : arr) {
            System.out.print(i+"\t");
        }
    }

    private static void doSort(int[] arr) {
        for (int i = 0; i < arr.length-1; i++) {        //-1是用於不確定輪數
            System.out.println("*****************第"+(i+1)+"輪排序*****************");        //用於確定輪數,可以刪除
            for(int j=i+1;j<arr.length;j++) {        //j=i+1用於去除元素和自己的比較
                if(arr[i]>arr[j]) {
                    int temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
                for (int k : arr) {        //用於查看每一次比較后的數組變化,可以刪除
                    System.out.print(k+"\t");
                }
                System.out.println();        //用於區別每一次比較后的數組元素,可以刪除
            }
        }
        
    }

}

結果展示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM