public void selectSort(int[] array) { for(int i = 0; i < array.length - 1; i++) { //無序區間是[0, array.length - i) //有序區間是[array.length - i, array.length) int max = 0; for(int j = 0; j < array.length - i; j++) { if(array[j] > array[max]) { max = j; } } int tmp = array[max]; array[max] = array[array.length - 1 - i]; array[array.length - 1 - i] = tmp; } }
雙向選擇排序ide
代碼:性能
public void selectSortOP(int[] array) { int left = 0; int right = array.length - 1; while(left <= right) { int min = left; int max = left; //遍歷無序區間,找到最大值和最小值的下標 for(int i = left + 1; i <= right; i++) { if(array[i] > array[max]) { max = i; } if(array[i] < array[min]) { min = i; } } swap(array, min, left); //判斷最大的值是否在最左側,若是是在最左側的話因爲最小的元素已經和他進行了交換,此時最大值的下標就 //再也不是left,而是交換後的min if (max == left) { max = min; } swap(array, max, right); left++; right--; } } private void swap(int[] array, int i, int j) { int tmp = array[i]; array[i] = array[j]; array[j] = tmp; }