📅  最后修改于: 2023-12-03 15:28:37.194000             🧑  作者: Mango
本题是GATE计算机科学入门考试的问题10,题目涉及C语言程序设计。
给定一个包含n个元素的整数数组A,编写一个C程序实现选择排序算法,并输出排序后的数组A。
#include <stdio.h>
void selectionSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
int minIndex = i;
for (int j = i+1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// Swap i and minIndex
int tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
}
int main() {
int n;
printf("Enter the number of elements: ");
scanf("%d", &n);
int arr[n];
printf("Enter elements:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
selectionSort(arr, n);
printf("\nSorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
题目要求使用选择排序算法对给定数组进行排序。选择排序算法每次在未排序的一段数组中找到最小的元素,然后将其与未排序中的第一个元素交换位置,将该最小元素纳入已排序的数组中。重复该操作直至未排序数组为空。
首先需要定义一个函数 selectionSort
,该函数接受一个数组和数组的长度。函数内部需要循环变量i,用于标记已排序数组的末尾位置,以及循环变量j,用于在未排序数组中查找最小元素的下标。首先将i位置下的元素作为已排序数组的唯一元素,接着在未排序数组中查找最小元素的下标,并将其与未排序数组的第一个元素交换位置,即将该最小元素纳入已排序的数组中。循环执行该操作,直到i到达数组末尾。
接着需要在主函数中读取数组元素,调用selectionSort函数进行排序,然后输出排序后的数组即可。
选择排序算法的时间复杂度为 $O(n^2)$,其中n为数组的长度。