简单选择排序,核心原理是每次从数组里面挑出一个最小的放到前面有序序列的最后一个位置,是不是感觉和直接插入排序很像,注意他们的区别,插入排序有插这个操作,插入的时候还要与前面有序的元素进行比较,并且插入排序拿出来进行插入操作的这个元素没有大小之分,也就说大的小的都可以只要是顺着拿的就行,而后者简单选择排序要求是从待排序的元素中每次找到一个最小的,我们依次把当前最小的放到前面有序的序列后面就行,不需要与前面有序的元素再进行比较。在简单选择排序中,0位置开始就存储元素,因为它的思想就是在原数组上进行操作,并不需要额外的空间临时存储值。
实现代码:
#include <stdio.h>
// 交换两个整数的值
void Swap(int* a, int* b) {
*a = *a + *b; // 步骤1: *a 加上 *b
*b = *a - *b; // 步骤2: *b 赋值为原 *a
*a = *a - *b; // 步骤3: *a 赋值为原 *b
}
// 选择排序函数
void SelectSort(int Array[], int n) {
// 外层循环: 遍历数组中的每一个元素(除了最后一个元素)
for (int i = 0; i < n - 1; i++) {
int min = i; // 假设当前索引 i 的元素为最小值
// 内层循环: 在未排序部分中找到最小值的索引
for (int j = i + 1; j < n; j++) {
if (Array[j] < Array[min]) {
min = j; // 更新最小值的索引
}
}
// 如果找到的最小值索引与当前索引不相等,则交换这两个元素
if (min != i) {
Swap(&Array[i], &Array[min]);
}
}
}
int main() {
// 初始化数组,包含待排序的元素
int Array[6] = { 5, 2, 87, 65, 43, 43 };
// 调用选择排序函数,对数组进行排序
SelectSort(Array, 6);
// 打印排序后的数组元素
for (int i = 0; i < 6; i++) {
printf("%d->", Array[i]);
}
printf("\n"); // 打印换行符,以结束输出
return 0;
}
运行结果: