原题链接:绝对值排序
解题思路:
/* 一. 在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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复