C语言编程:按绝对值排序 求大神啊。

题目描述
输入n和n个数,要求能够实现按绝对值从小到大排序后输出。(n<=10).

说明:因为n<=10,所以数组定义时的长度为10。

输入描述

输入n和n个整数

输出描述

按绝对值从小到大输出这n个整数

输入样例

5
5 -8 -4 -6 3

输出样例

3 -4 5 -6 -8

#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

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-26
#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");
}

第2个回答  2013-11-26
我发现又是你哈,我就还是从上一题我的回答来改吧。
#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;
}

相似回答