1. 选择排序的概念
选择排序将数组分为两份,一份是排好序的,另一份则是待排序的。
如升序,选择排序就是每次遍历待排序的数组选出最小的然后放在排好序的末尾。
举个例子,用选择排序对数组 [2,4,1,3] 进行排序,以下是排序过程:
步骤 | 排好序 | 待排序 | 说明 |
---|---|---|---|
1 | [] | [2,4,1,3] | 初始化 |
2 | [1] | [2,4,3] | 选择最小的1 |
3 | [1,2] | [4,3] | 选择剩下的最小的2 |
3 | [1,2,3] | [4] | 选择剩下的最小的3 |
3 | [1,2,3,4] | [] | 选择剩下的最小的4 |
2. 时间复杂度
\( O(n^2) \)
遍历一次选一个最小数的时间复杂度为O(n),要选n个数。
所以时间复杂度为\( O(n^2) \)
3. java实现
public void selectSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int min = arr[i], minIdx = i;
//select min element in right array
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < min) {
min = arr[j];
minIdx = j;
}
}
// swap
swap(arr, i, minIdx);
}
}
private void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。