【算法与数据结构】—— 选择排序
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 |
\( 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;
}
4.代码地址
【【算法与数据结构】—— 选择排序】Github:https://github.com/bennetty74...
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 宽容谁
- 我要做大厨
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 第326天