排序原理
所谓的选择排序就是从给定的数组中未排序的元素中依次找出最小值,并将最小值依次放在已经排好序的元素后边,直到全部排完。排序过程为,首先找出数组中最小值的下标,然后将数组中第一个元素与最小值交换位置,然后在剩余未排序的元素中找到最小值的下标,并将数组的第二个元素与最小值交换位置,然后重复上述步骤,知道所有元素排序完成。
时间复杂度
- 无论数组是正序还是反序,当在第i次遍历的时候,需要进行n-i次比较,全部排序下来需要n*(n-1)/2次比较,同时还需要交换元素位置,总的移动次数为3n*(n-1)/2次,所以时间复杂度为O(n2)。
排序代码
public class SelectionSort {
/**
* 选择排序
*/
public void selectionSort(int[] arr, int a, int n) {
//寻找数组中[a,n)区间的最小值
for (int i = a; i < n; i++) {
//定义一个最小值的下标
int min = i;
for (int j = i + 1; j < n; j++) {
//利用第一个数与其余的比较找出最小值的下标
if (arr[min] > arr[j]) {
min = j;
}
}
//如果最小下标不等于当前元素,那么就说明找到了最小元素
if (min != i) {
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
}