解题思路:
/* 一. 在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 人评分