📜  C测验– 101 |问题3(1)

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

C测验- 101 |问题3

问题描述

有一个包含n个元素的整数数组,需要将其按照升序排序。请写一个程序实现该功能。

解决方案

我们可以使用C语言的标准库函数qsort来实现排序。qsort函数接受四个参数:

void qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*));

其中:

  • base:数组的首元素指针
  • num:数组的元素个数
  • size:数组的每个元素的大小
  • compar:比较函数的指针(用于确定元素的相对顺序)

比较函数需要根据参数qsort提供的两个元素,返回一个负整数、零或正整数,表示相对顺序。如果第一个元素在第二个元素之前,则返回负整数;如果两个元素相等,则返回零;如果第一个元素在第二个元素之后,则返回正整数。

例如,以下函数将两个整数按升序排列:

int compareAsc(const void* a, const void* b) {
    int num1 = *(int*)a;
    int num2 = *(int*)b;
    if (num1 < num2) return -1;
    else if (num1 == num2) return 0;
    else return 1;
}

有了比较函数,我们可以调用qsort函数来对数组进行排序:

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100

int compareAsc(const void* a, const void* b) {
    int num1 = *(int*)a;
    int num2 = *(int*)b;
    if (num1 < num2) return -1;
    else if (num1 == num2) return 0;
    else return 1;
}

int main() {
    int array[MAX_SIZE], num;
    printf("请输入数组元素个数:");
    scanf("%d", &num);
    printf("请输入数组元素:\n");
    for (int i = 0; i < num; i++) {
        scanf("%d", &array[i]);
    }
    qsort(array, num, sizeof(int), compareAsc);
    printf("排序结果:");
    for (int i = 0; i < num; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
    return 0;
}

这里我们先输入数组元素的个数和值,然后调用qsort排序,最后输出排序结果。

总结

使用标准库函数qsort来对数组进行排序是一个简单而实用的方法。我们只需要实现一个比较函数来确定排序的方式,剩下的工作就交给qsort处理即可。