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
展开
 我来答
百度网友177231b
推荐于2017-11-26 · 超过12用户采纳过TA的回答
知道答主
回答量:16
采纳率:0%
帮助的人:27.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

Rankabc
2013-11-26 · TA获得超过3561个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1073万
展开全部
#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");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小坏蛋宽guy
2013-11-26 · TA获得超过300个赞
知道小有建树答主
回答量:239
采纳率:66%
帮助的人:142万
展开全部
我发现又是你哈,我就还是从上一题我的回答来改吧。
#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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式