Online Compiler C

#include <stdio.h> void sort_array(int size, int a[]) { for (int i = 0; i < size - 1; i++) { int i_min = i; for (int j = i+1; j < size; j++) { if (a[i_min] > a[j]) { i_min = j; } } if (i_min != i) { int temp = a[i]; a[i] = a[i_min]; a[i_min] = temp; } } } int main() { int a[6] = {5,5,4,3,2,1}; sort_array(6,a); for (int i = 0; i < 6; i++){ printf("%d ", a[i]); } return 0; }
这段代码实现了一个选择排序算法,对数组进行升序排列。主函数中定义了一个包含6个整数的数组,调用排序函数后输出排序结果。

- 选择排序的核心思想是:每一轮从未排序部分找到最小元素,将其放到已排序部分的末尾。你的代码中,外层循环控制已排序部分的边界,内层循环寻找最小元素的下标,找到后与当前位置交换。

- 代码逻辑是正确的,但有一个小问题:当数组中有重复元素时,排序结果仍然是正确的。不过,你可以思考一下,如果数组已经有序,这个算法是否还能提前结束?目前它仍然会执行所有比较,但不会进行交换。