c语言数组编程的疑惑

请问怎么用数组解决范围较大的数的比较问题?
比如以下实例:
假设有50张卡片,每张卡片上都印有其编号(1~50)。

现在这些卡片的次序被打乱了,需要你将其重新按照升序排序。

用冒泡排序啊

#include <stdio.h>
int main()
{
    int card[50],i,j,t;
    for(i=0;i<50;i++)
        scanf("%d",&card[i]);
    for(i=0;i<49;i++)
        for(j=0;j<49-i;j++)
        {
            if(card[j] > card[j+1])
            {
                t = card[j];
                card[j] = card[j+1];
                card[j+1] = t;
            }
        }
      for(i=0;i<50;i++)
          printf("%d ",card[i]);
}

一维数组的排序 可以看看排序算法的知识 例如:冒泡排序 选择排序********很多的

#include <stdio.h>
#define CARD_NUM 50
void selection_sort(int card[], int n);
int main() {
    int cards[CARD_NUM] = {22, 3, 46, 12, 35, 17, 29, 48, 44, 1, 39, 27, 18, 10, 45, 9, 31, 26, 32, 4, 40, 47, 16, 14, 30, 11, 25, 42, 2, 28, 7, 21, 23, 20, 43, 6, 8, 36, 38, 33, 41, 5, 15, 19, 49, 24, 50, 34, 13, 37};
    int i;
    printf("排序前的卡片:\n");
    for (i = 0; i < CARD_NUM; i++) {
        printf("%d ", cards[i]);
    }
    printf("\n");
    selection_sort(cards, CARD_NUM);
    printf("排序后的卡片:\n");
    for (i = 0; i < CARD_NUM; i++) {
        printf("%d ", cards[i]);
    }
    printf("\n");
    return 0;
}
void selection_sort(int card[], int n) {
    int i, j;
    int min_index, tmp;
    for (i = 0; i < n - 1; i++) {
        min_index = i;
        for (j = i + 1; j < n; j++) {
            if (card[j] < card[min_index]) {
                min_index = j;
            }
        }
        if (min_index != i) {
            tmp = card[i];
            card[i] = card[min_index];
            card[min_index] = tmp;
        }
    }
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7469173
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C语言【程序50】 题目:一个偶数总能表示为两个素数之和。
  • 除此之外, 这篇博客: 事隔一年,再入代码;舍弃前端,入手嵌入;C两周后,小记一篇(1)。中的         1.宏定义(函数)  属于预处理的一部分   它没有运算优先级  必须在宏定义时就要定义好运算规律  意思是在主函数里面使用定义的宏时  没有运算规律  部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    例如 你定义

    #define mul(a,b) a*b

    就像下面输出结果是41而不是66

    int main()
    {
    	int a=5,b=6;
    	int c=mul(a+b,b);
    	printf("%d\n",c);
    }

            mul(a+b,b)并不是按(a+b)*b 而是 a+b*b输出结果    并没有运算规则  他是完整的把a+b 传递给了a 其实说成没有运算规则不严谨 只是没有按照我们给他的设想去计算,它比较死,一股脑传递过去  自然成了a+b*b

    #define mul(a,b) (a)*(b)

    结果自然是66


  • 您还可以看一下 钟洪发老师的鸿蒙设备开发之C知识点全面梳理课程中的 网络数据传输的大小端问题小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    怎样使用C语言数组算法解决一个范围较大的数的比较问题?

    对于比较问题,可以使用C语言的数组算法来进行解决。其中,冒泡排序和快速排序是比较常用的算法之一。

    冒泡排序

    冒泡排序就是把大的元素往后移,小的元素往前移,每一次比较都交换相邻两个元素的位置,从而实现对整个数组的排序。具体来说,就是对数组中相邻两个元素进行比较,并交换其位置,每一轮比较结束后会将未排序的最大元素移到当前未排序部分的最后。

    下面是冒泡排序的代码实现:

    void bubble_sort(int arr[], int len) {
        int i, j, temp;
    
        for (i = 0; i < len - 1; i++) {        //两两比较较大的排后面
            for (j = 0; j < len - 1 - i; j++) { 
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
    

    快速排序

    快速排序则是在数组中选择一个元素作为基准,并将数组分为两个子序列,其中一个子序列中的所有元素都小于等于基准,而另一个子序列中的所有元素都大于基准,然后对这两个子序列分别进行递归排序。

    下面是快速排序的代码实现:

    void quick_sort(int a[], int left, int right) {
        if (left >= right) {
            return;
        }
        int i = left, j = right, key = a[left];
        while (i < j) {
            while (i < j && a[j] >= key) {
                j--;
            }
            if (i < j) {
                a[i++] = a[j];
            }
            while (i < j && a[i] < key) {
                i++;
            }
            if (i < j) {
                a[j--] = a[i];
            }
        }
        a[i] = key;
        quick_sort(a, left, i - 1);
        quick_sort(a, i + 1, right);
    }
    

    解决50张卡片按编号升序排序的例子

    对于50张卡片按编号升序排序的问题,可以先将卡片编号存储在一个数组中,然后使用以上两种算法中的一种对数组进行排序,最终得到升序排序后的数组。

    下面是一个使用冒泡排序进行50张卡片按编号升序排序的示例代码:

    #include <stdio.h>
    
    void bubble_sort(int arr[], int len);
    
    int main() {
        int arr[50] = { 42, 1, 9, 23, 6, 13, 18, 7, 37, 2, 33, 21, 22, 43, 49, 29,
                24, 5, 14, 47, 50, 3, 46, 16, 15, 10, 38, 31, 36, 44, 32, 28, 39,
                11, 35, 34, 48, 27, 45, 41, 30, 17, 40, 4, 8, 19, 12, 25, 20, 26 };
    
        bubble_sort(arr, 50);
    
        for (int i = 0; i < 50; i++)
            printf("%d ", arr[i]);
    
        return 0;
    }
    
    void bubble_sort(int arr[], int len) {
        int i, j, temp;
    
        for (i = 0; i < len - 1; i++) {        //两两比较较大的排后面
            for (j = 0; j < len - 1 - i; j++) { 
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
    

    输出结果如下:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^