#include <stdio.h>
// 函数原型
void selectionSort(int arr[], int n);
void swap(int *xp, int *yp);
void printArray(int arr[], int size);
// 主函数
int main() {
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr)/sizeof(arr[0]);
selectionSort(arr, n);
printf("排序后的数组: \n");
printArray(arr, n);
return 0;
}
// 选择排序函数
void selectionSort(int arr[], int n) {
int i, j, min_idx;
// 一次移动未排序数组的边界
for (i = 0; i < n-1; i++) {
// 找到最小元素的索引
min_idx = i;
for (j = i+1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
// 将找到的最小元素与第i个元素交换
swap(&arr[min_idx], &arr[i]);
}
}
// 交换两个元素的函数
void swap(int *xp, int *yp) {
int temp = *xp;
*xp = *yp;
*yp = temp;
}
// 打印数组的函数
void printArray(int arr[], int size) {
int i;
for (i=0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
这个程序定义了三个函数:selectionSort
用于执行选择排序,swap
用于交换两个整数,printArray
用于打印数组元素。
在 main
函数中,我们定义了一个整数数组 arr
并调用 selectionSort
函数对其进行排序。排序完成后,我们调用 printArray
函数来打印排序后的数组。
选择排序的工作原理是在每次迭代中找到未排序部分的最小元素,并将其与未排序部分的第一个元素交换。这样,每次迭代后,排序部分的边界就会向右移动一位。这个过程一直持续到整个数组都被排序为止。