活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
1. 概念
直接选择排序
又称为简单选择排序
,是一种不稳定
的排序方法,算法基本思想:在未排序序列中找到最小元素,存放在排序序列的起始位置。然后再从剩余未排序元素中继续寻找最小的元素,放在已排序序列的末尾,以此类推,直到所有元素均排序完成。
伪代码
//外层循环用于控制循环的趟数
//内存循环是在无序区中选出最小的元素并记录
for i = 1 to n - 1
k = i
for j = i + 1 to n
if A[j] < A[k]
k = j
if k != i
exchange A[i] with A[k]
2. 代码实现
2.1 Java版
public class SelectionSort {
public static void main(String[] args) {
int[] a = { 11, 34, 20, 10, 12, 35, 41, 32, 43, 14 };
sort(a);
for (int data : a) {
System.out.println(data + "\t");
}
}
private static void sort(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
int k = i;
for (int j = i + 1; j < a.length; j++) {
if (a[j] < a[k]) {
k = j;
}
}
if (k != i) {
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
}
2.2 Python版
l = [11, 34, 20, 10, 12, 35, 41, 32, 43, 14]
def straight_select(l):
for j in range(len(l)):
min = j
for i in range(j+1,len(l)):
if l[i] < l[min]:
min = i
if min != j:
l[min],l[j] = l[j],l[min]
straight_select(l)
for i in range(len(l)):
print(l[i])
3. 算法效率分析
3.1 时间复杂度
- 平均时间复杂度
无论是最好还是最坏情况,时间复杂度均为O(n^2),
所以平均时间复杂度O(n^2)
3.2 空间复杂度
仅需要一个存储空间用于记录交换的暂存单元,空间复杂度为O(1)。
每周坚持学习,一定会看到不一样的自己。