📜  门| GATE CS 1999 |问题10(1)

📅  最后修改于: 2023-12-03 15:28:37.194000             🧑  作者: Mango

门 | GATE CS 1999 | 问题10

本题是GATE计算机科学入门考试的问题10,题目涉及C语言程序设计。

题目描述

给定一个包含n个元素的整数数组A,编写一个C程序实现选择排序算法,并输出排序后的数组A。

输入格式
  • n: 数组A的元素个数 (1 <= n <= 100)
  • A: 包含n个整数的数组A,以空格分隔
输出
  • 排序后的数组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为数组的长度。