选择排序:一种重要的基于交换的排序算法。
基本思想:序列分为有序和无序两个子序列,每次从无序列种选择最小的和有序列最后一个交换。
大致过程:
[9, 12 4 0 7 21 3 5] --> 0最小和9交换
[0 12, 4 9 7 21 3 5] --> 3最小和12交换
[0 3 4, 9 7 21 12 5] --> 4已经是最小,继续
......
//头文件
#include <stdio.h>
#include <stdlib.h>
//自定义类型
typedef int ElemType;
//函数声明
void SelectSort(ElemType *, int);
//主函数,程序入口
int main(void) {
ElemType a[8] = {9, 12, 4, 0, 7, 21, 3, 5};
SelectSort(a, 8);
int i;
for (i = 0; i < 8; ++i) {
printf("%d ", a[i]);
}
return EXIT_SUCCESS;
}
//选择排序
void SelectSort(ElemType *a, int n) {
int i;
int j;
ElemType minValue;
int minIndex;
ElemType temp;
for (i = 0; i < n - 1; ++i) {
//每一趟认为第一个是最小的
minIndex = i;
minValue = a[minIndex];
for (j = i + 1; j < n; ++j) {
if (a[j] < minValue) {
minValue = a[j];
minIndex = j;
}
}
//第一个和最小的交换
temp = a[i];
a[i] = a[minIndex];
a[minIndex] = temp;
}
}