You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C语言中从已排序数组根据输入排名提取对应数值的实现问题

实现指导

核心逻辑

你当前实现的冒泡排序为升序排序,排序完成后数组元素从小到大依次存储,C语言数组下标从0开始,因此用户输入排名值rank后,对应数值的下标为rank - 1,直接读取该下标对应元素即可得到目标结果。

新增功能需要补充的步骤

  • 调用scanf接收用户输入的排名值
  • 增加输入合法性校验:需保证输入的排名值≥1,且≤数组长度n,避免数组越界导致程序异常

修改后的完整代码

#include <stdio.h>
 
void swap(int *xp, int *yp)
{
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
}
 
// 实现冒泡排序的函数
void bubbleSort(int arr[], int n)
{
   int i, j;
   for (i = 0; i < n-1; i++)     
 
       // 末尾i个元素已经处于正确位置
       for (j = 0; j < n-i-1; j++)
           if (arr[j] > arr[j+1])
              swap(&arr[j], &arr[j+1]);
}
 
/* 打印数组的函数 */
void printArray(int arr[], int size)
{
    int i;
    for (i=0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}
 
// 测试上述函数的主程序
int main()
{
    int arr[] = {25000, 10000, 25000, 90000, 90000, 25000, 25000, 10000, 10000, 25000};
    int n = sizeof(arr)/sizeof(arr[0]);
    bubbleSort(arr, n);
    printf("Sorted array: \n");
    printArray(arr, n);

    // 新增排名查询逻辑
    int rank;
    printf("请输入要查询的排名(输入数字越小返回数值越小):");
    scanf("%d", &rank);
    // 输入合法性校验
    if (rank < 1 || rank > n) {
        printf("输入不合法,请输入1到%d范围内的整数\n", n);
        return 1;
    }
    printf("排名%d对应的数值为:%d\n", rank, arr[rank - 1]);
    return 0;
}

扩展说明

如果后续需要调整为输入数字越小输出数值越大的逆序排名逻辑,只需修改冒泡排序的比较条件:将if (arr[j] > arr[j+1])改为if (arr[j] < arr[j+1])即可,排名取值逻辑无需调整。

内容的提问来源于stack exchange,提问作者el_siego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:45:04