选择排序
第一次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
这是一种简单 , 便于理解 , 代码便于实现但效率并不高的排序算法 .
我们来看图解 :
我们就已华安的代号 9 5 2 7 为例 选择排序算法
选择排序的特点
稳定性 : 不稳定
我们以 5 8 5 2 9为例, 第一趟排完之后, 两个5的前后顺序发生变化, 所以选择排序不稳定时间复杂度 : O(n^2)
空间复杂度 : O(n^2)
注: 当数据量特别大时, 不推荐用选择排序, 因为选择排序的 O(n^2) 的复杂度在数量大时, 非常耗时
具体代码 :
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 100
void Swap(int* a,int* b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void SelectionSort(int* src, int size) {
for (int i = 0; i < size; ++i) {
for (int j = i + 1; j < size; ++j) {
if (src[i] > src[j]) {
Swap(src + i, src + j);
}
}
}
}
void PrintArray(int* src, int size) {
for (int i = 0; i < size; ++i) {
printf("%d ", src[i]);
}
putchar('\n');
}
int main() {
srand((unsigned int)time(0));
int src[N];
for (int i = 0; i < N; ++i) {
src[i] = rand() % N + 1;
}
printf("排序前:\n");
PrintArray(src, N);
SelectionSort(src, N);
printf("排序后:\n");
PrintArray(src, N);
system("pause");
return 0;
}