選擇排序原理:
從待排序的元素中選出最小(大)的元素放在起始位置,然后再從剩余的元素中選出最小(大)的元素放在已排好的部分之后,直到只剩最后一個待排序的元素為止.
示例:
例如數組[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(); //用於區別每一次比較后的數組元素,可以刪除 } } } }
結果展示: