怪盗KID


私信TA

用户名:dotcpp0774863

访问量:427

签 名:

一万年太久,只争朝夕。

等  级
排  名 1931
经  验 2513
参赛次数 0
文章发表 20
年  龄 19
在职情况 学生
学  校 哔哩哔哩
专  业

  自我简介:

解题思路:

/*  一.
在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分

1 人评分

  评论区

  • «
  • »