八大排序
选择排序:
选择排序的基本思想是:每一趟从待排序的数据中选出最小元素,顺序放在已排好序的数据最后,直到全部 数据排序完毕。
一、直接选择排序
平均时间复杂度:O(n²)
空间复杂度:O(1)
稳定性:不稳定×
1.过程模拟
待排序数据 | 92 | 28 | 62 | 84 | 62 | 16 | 56 | 87 | 33 | 66 |
---|---|---|---|---|---|---|---|---|---|---|
第一趟排序 | 16 | 28 | 62 | 84 | 62 | 92 | 56 | 87 | 33 | 66 |
第二趟排序 | 16 | 28 | 62 | 84 | 62 | 92 | 56 | 87 | 33 | 66 |
第三趟排序 | 16 | 28 | 33 | 84 | 62 | 92 | 56 | 87 | 62 | 66 |
第四趟排序 | 16 | 28 | 33 | 56 | 62 | 92 | 84 | 87 | 62 | 66 |
第五趟排序 | 16 | 28 | 33 | 56 | 62 | 92 | 84 | 87 | 62 | 66 |
第六趟排序 | 16 | 28 | 33 | 56 | 62 | 62 | 84 | 87 | 92 | 66 |
第七趟排序 | 16 | 28 | 33 | 56 | 62 | 62 | 66 | 87 | 92 | 84 |
第八趟排序 | 16 | 28 | 33 | 56 | 62 | 62 | 66 | 84 | 92 | 87 |
第九趟排序 | 16 | 28 | 33 | 56 | 62 | 62 | 66 | 84 | 87 | 92 |
2.程序代码
public class SelectSort {
public static void main(String[] args) {
print();
System.out.println();
selectSort();
print();
}
static int[] data = {92,28,62,84,62,16,56,87,33,66};
public static void selectSort(){
// K 保存每次最小值的下标
int tmp = 0, k=0;
for (int i = 0; i < data.length; i++) {
k = i;
for (int j = i+1; j < data.length; j++) {
if (data[j] < data[k]){
k = j;
}
}
tmp = data[k];
data[k] = data[i];
data[i] = tmp;
}
}
public static void print(){
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
}
}
92 28 62 84 62 16 56 87 33 66
16 28 33 56 62 62 66 84 87 92
3.算法分析
(1)稳定性:不稳定
(2)时间复杂度:O(n²)
(3)空间复杂度:仅需一个中间单元 A[0]