简单选择排序属于内部排序中的选择排序的一种。
算法思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
空间复杂度 最优的情况下(已正序)复杂度为O(0),最差情况下(全部元素都需要排序),空间复杂度为O(n)
时间复杂度 最优,最差和平均都是O(n^2)
算法实现思想 从牌堆里找出最大的的一张牌,插在左手边。
java实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public int[] selectSort(int[] array){ if (array.length <= 1){ return array; } for(int i = 0; i < array.length - 1; i++){ int temp = 0; int index = i; for (int j = i + 1; j < array.length; j++){ if (array[index] > array[j]){ index = j; } } temp = array[index]; array[index] = array[i]; array[i] = temp; } return array; }
c实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 void selectSort(int array[], int length){ int i, j, temp; if(1 >= length) return; for(i = 0; i < length; i ++){ temp = i; for(j = i; j < length; j++){ if(array[temp] < array[j]) temp = j; } if(i != temp){ j = array[temp]; array[temp] = array[i]; array[i] = j; } } }
python实现 1 2 3 4 5 6 7 8 def selectSort(self, A): for i in range(len(A) - 1): min_ind = i for j in range(i + 1,len(A)): if A[min_ind] > A[j]: min_ind = j if min_ind != i: self.swap(A, min_ind, i)