C语言编程:按绝对值排序 求大神啊。
题目描述输入n和n个数,要求能够实现按绝对值从小到大排序后输出。(n<=10).说明:因为n<=10,所以数组定义时的长度为10。输入描述输入n和n个整数输出描述按绝对值...
题目描述
输入n和n个数,要求能够实现按绝对值从小到大排序后输出。(n<=10).
说明:因为n<=10,所以数组定义时的长度为10。
输入描述
输入n和n个整数
输出描述
按绝对值从小到大输出这n个整数
输入样例
5
5 -8 -4 -6 3
输出样例
3 -4 5 -6 -8 展开
输入n和n个数,要求能够实现按绝对值从小到大排序后输出。(n<=10).
说明:因为n<=10,所以数组定义时的长度为10。
输入描述
输入n和n个整数
输出描述
按绝对值从小到大输出这n个整数
输入样例
5
5 -8 -4 -6 3
输出样例
3 -4 5 -6 -8 展开
3个回答
展开全部
#include <stdio.h>
int abs_val(int x);
int main(void)
{
int a[10], n, temp, i, j;
scanf("%d", &n);
for (i = 0; i < n; ++i)
scanf("%d", &a[i]);
/* 冒泡排序 */
for (i = n - 1; i >= 1; --i) {
for (j = 0; j < i; ++j) {
if (abs_val(a[j]) > abs_val(a[j + 1])) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
else if (abs_val(a[j]) == abs_val(a[j + 1]) && a[j] > a[j + 1])
/* 确保绝对值相同时,正数在负数之后 */
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (i = 0; i < n; ++i)
printf("%d ", a[i]);
printf("\n");
return 0;
}
int abs_val(int x)
{
return x > 0 ? x : -x;
}
这个程序是键盘输入,屏幕输出。
如果你有进一步的问题,愿意的话,可以把QQ告诉我,我加你QQ
展开全部
#include<stdio.h>
#include "math.h"
#define N 99
void main()
{
int i,a[N],t,j,n,b,k=0;
scanf("%d",&n);
for(i=0;1==1;i++)
{
scanf("%d",&a[i]);
k++; //计算输入个数
if (getchar()=='\n') break; //遇回车中断
}
/*选择排序法*/
for(j=1;j<k;j++) //N次比较
for(i=0;i<j;i++) //每趟中比j次
if(fabs(a[i])>fabs(a[j])) //与a[i]后面的元素进行比较
{
t=a[i];a[i]=a[j];a[j]=t;
}
printf("n=%d\n",n);
printf("排序后:\n");
for(i=0;i<k;i++) printf("%d ",a[i]);
printf("\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我发现又是你哈,我就还是从上一题我的回答来改吧。
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char *argv[])
{
int n;
cin>>n;
int *arr = new int[n];
int i;
for (i = 0; i < n; i++) {
cin>>arr[i];
}
int min, j;
for (i = 0; i < n - 1; i++) {
min = i;
for (j = i + 1; j < n; i++) {
if (abs(arr[j]) < abs(arr[min])) { //就是这里不一样
min = j;
}
}
if (min != i) {
int t = arr[i];
arr[i] = arr[min];
arr[min] = t;
}
}
for (i = 0; i < n; i++) {
cout<<arr[i]<<' ';
}
cout<<endl;
delete arr;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询