选择排序算法思想:
假设数组中有N个数,则先遍历数组0到(N-1)位置上的N个数,找出最小的那个数和数组0位置上的数作交换,然后遍历数组1到(N-1)位置上的N个数,找出最小的那个数和数组1位置上的数做交换……以此类推,最终,遍历数组N到(N-1)位置上的数,找出最小的那个数和数组N-1位置上的数作交换,至此,数组完成排序。
选择排序代码:
public class SelectionSort {
public void selectionSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
selectionSort(arr, 0, arr.length - 1);
}
public void selectionSort(int[] arr, int l, int r) {
if (l < r) {
int minIndex;
for (int i = l; i < r; i++) {//每次排完一遍之后,最小的的那个元素放在最左侧的位置
minIndex = i;
for (int j = i + 1; j <= r; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
}
swap(arr, i, minIndex);
}
}
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
选择排序时间复杂度:
O(N^2)
选择排序额外空间复杂度:
O(1)