解题思路:

/*  一.
在C语言中,按绝对值排序一组数通常意味着你需要先计算每个数的绝对值,
然后根据这些绝对值来排序原始数组(或复制一份进行排序以避免修改原始数据)。
*/
/*
   二.
*/

注意事项:

//无


参考代码:

//方法一
#include <stdio.h>
//冒泡排序法函数//函数可以copy一下回头还可以用
void bubbleSort(int arr[], int n) {
    int i, j, temp;
    for (i = 0; i < n - 1; i++) {
        // 最后的i个已经排好了  
        for (j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换 arr[j] 和 arr[j+1]  
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
int main()
{
    int n;      //输入第一个数N
    while (scanf_s("%d", &n)) {
        if (n==0) {
            goto home;      //n为0时结束循环
        }

        int nums_1[100] = { 0 };//存放输入的n个数据
        int nums_2[100] = { 0 };
        int nums_3[100] = { 0 };
        int nums_4[100] = { 0 };
        for (int i = 0; i < n; i++) {   //读入
            scanf_s("%d", &nums_1[i]);
        }
        for (int i = 0; i < n; i++) {
            if (nums_1[i] <= 0){
                nums_2[i] = -nums_1[i];         //得到绝对值的数组
            }
            else {
                nums_2[i] = nums_1[i];
            }
        }

        bubbleSort(nums_2, n);          //对绝对值数组排序,按从小到大

        /*printf("打印sum_2[]=\n");
        for (int i = 0; i < n; i++) {
            printf("%d ", nums_2[i]);
        }*/

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (nums_2[i] == nums_1[j] || nums_2[i] == -nums_1[j]) {
                    nums_2[i] = nums_1[j];
                }
            }
        }
        
        for (int i = n-1; i>=0; i--) {
            printf("%d ", nums_2[i]);        //因为之前时从小到大排序的,所以这时候要从末尾开始打印。
        }
        printf("\n");


    }
    home:
    //printf("结束\n");
    
    return 0;
}
//方法二
#include <stdio.h>  
#include <stdlib.h> // 用于abs函数  
  
// 交换两个整数的值  
void swap(int *a, int *b) {  
    int temp = *a;  
    *a = *b;  
    *b = temp;  
}  
  
// 冒泡排序,按绝对值排序  
void sortByAbsoluteValue(int arr[], int n) {  
    int i, j, temp;  
    for (i = 0; i < n-1; i++) {  
        for (j = 0; j < n-i-1; j++) {  
            // 注意:这里使用abs函数来获取绝对值,然后比较  
            if (abs(arr[j]) > abs(arr[j+1])) {  
                swap(&arr[j], &arr[j+1]);  
            }  
        }  
    }  
}  
  
int main() {  
    int arr[] = {0, 1, 2, -3};  
    int n = sizeof(arr)/sizeof(arr[0]);  
  
    printf("Original array: \n");  
    for (int i = 0; i < n; i++) {  
        printf("%d ", arr[i]);  
    }  
    printf("\n");  
  
    sortByAbsoluteValue(arr, n);  
  
    printf("Sorted array by absolute value: \n");  
    for (int i = 0; i < n; i++) {  
        printf("%d ", arr[i]);  
    }  
    printf("\n");  
  
    return 0;  
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论