將待排元素分爲有序區間和無序區間,無序區間在前,每次從無序區間的全部元素中選出一個最大的數array[max],將該數與無序區間最後一個數進行交換(至關於在有序區間的第一位置新插入一個數)
假設開始所有元素都是無序區間內的:
繼續重複上述操做
java
最終結果
代碼實現ide
public static void selectSort(int[] array) {// //無序區間在前邊 //每次選最大數 for (int i = 0; i < array.length - 1; i++) { int max = 0; for (int j = 1; j < array.length - i; j++) { if (array[max] < array[j]) { max = j; } } swap(array, max, array.length-i- 1); }
與選擇排序基本思想一致,只是在無序區間增長同時尋找最大值和最小值的的方法,節省時間
代碼實現:3d
private static void selsectSorts2(int[] array){ int low=0; int high=array.length-1; while(low<high){ int max=low; int min=low; for(int i=low+1;i<=high;i++){ if(array[i]>array[max]){ max=i; } if(array[i]<array[min]){ min=i; } } swap(array,min,low); if(max==low){//說明最大值就是第一個數 max=min;//而剛上一步的交換,會將最大值交換到下標爲min的位置 //全部要將max等於min,標記找回最大值 } swap(array,max,high); low++; high--; } }