一、算法思想
每一趟在待排序元素中选取关键字最小的元素加入有序子序列。必须进行 n-1 趟处理,最后一个不用处理。
二、算法示例
如下数组 A 中,变量 i (从 1 ~ n-1),初始令变量 min = i,,变量 j 从 i+1 ~ n 依次遍历元素,若 A[min] > A[j],则更新 min = j,当变量 j 遍历到 n 后,判断 i 是否还与 min 相等,若相等则说明当前最小值就是 i 所指向的元素,若不相等,则需要交换 i 与 min 所指向的元素,这样就确定了一个最小值元素,进行下一次上述流程,总过需要 n-1 趟便可以将数组 A 排序为从小到大。
三、算法实现
#include <stdio.h>
void select_sort(int *, int);
int main() {
int length;
// 获取数组长度
printf("please enter the array length : \n");
scanf("%d", &length);
// 获取数组元素
int A[length];
printf("please enter the number to sort : \n");
for (int i = 0; i < length; ++i) {
scanf("%d", &A[i]);
}
// 进行选择排序
select_sort(A, length);
// 打印排序后的结果
for (int i = 0; i < length; ++i) {
printf("%-2d ", A[i]);
}
return 0;
}
/**
* 选择排序
*/
void select_sort(int *A, int length) {
int min; // 存放当前最小元素的索引
for (int i = 0; i < length - 1; ++i) { // 当只剩下最后一个元素时,也就不需要再排序了
min = i;
for (int j = i + 1; j < length; ++j) {
if(A[min] > A[j]) {
min = j;
}
}
// 将最小元素放到前面
if(min != i) {
int temp = A[min];
A[min] = A[i];
A[i]= temp;
}
}
}