神犇营-my1041-绝对值排序

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载,请与博主联系。 https://blog.csdn.net/qq_31790997/article/details/88910637

【小韦同学@神犇营-my1041-绝对值排序】

题目:

描述

给出n个数,有正有负,请按照它们的绝对值从小到大进行排序(绝对值一样的保持原有前后顺序)。
比如:
输入:
3
5 2 -5
输出:
2 5 -5

输入

第一行为一个正整数n(1<=n<=20000)
第二行n个整数,绝对值范围(0~1000000)

输出

输出排好序的n个数(每行8个数,最后一行可以不够8个数,行末不能有空格)

输入样例1

18
5 4 2 1 3 9 8 7 6 10 11 -18 -16 -17 13 14 12 15

输出样例1

1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 -16
-17 -18

题解:

/********************************************************************* 

* 题目:神犇营-my1041-绝对值排序 
* 作者:小韦同学 
* 邮箱:[email protected] 

* 题解:
	思路:
	可以用冒泡排序,只是在比较元素的时候是用绝对值比较。
	注意: 
	1°输出要8个元素一行,并且行末不能有多余的空格。
	2°注意是稳定排序。 

*********************************************************************/ 

#include <bits/stdc++.h>
using namespace std;

int main() {
	
	int n;
	cin >> n;
	int num[n];
	for (int i = 0; i < n; i++) {
		cin >> num[i];
	}
    for (int i = 0; i < n - 1; i++) {
		bool swapped = false;
		for (int j = 0; j < n - i - 1; j++) {
			if (abs(num[j]) > abs(num[j + 1])) {
				swap(num[j], num[j + 1]);
				swapped = true;
			}
		}
		if (swapped == false) {
			break;
		}
	}
	for (int i = 0; i < n; i++) {
		cout << num[i];
		if ((i + 1) % 8 != 0) cout << " ";
		else cout << endl;
	}
	
	return 0;
}

我是小韦同学,企者不立,跨者不行,每天进步一点点。
欢迎大家多多交流,如果发现有错误,请多指正。有疑问的同学也可以留言评论或者发邮件。
邮箱:[email protected]

猜你喜欢

转载自blog.csdn.net/qq_31790997/article/details/88910637