首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言絕對值排序二維數組:ACM 題目參考解法

     編輯:程式設計綜合問答

題目要求

輸入 n (≤100) 及 n 個整數,按**絕對值從大到小**輸出,絕對值相同按原序(穩定排序)。多組測試直到 EOF。

參考代碼 (冒泡/穩定)

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, a[101];
    while (scanf("%d", &n) == 1 && n) {
        for (int i = 0; i < n; i++) scanf("%d", &a[i]);
        // 穩定排序:插入排序或冒泡(只交換嚴格大於)
        for (int i = 1; i < n; i++) {
            int key = a[i], j = i - 1;
            while (j >= 0 && abs(a[j]) < abs(key)) { // 絕對值大者前移
                a[j + 1] = a[j];
                j--;
            }
            a[j + 1] = key;
        }
        for (int i = 0; i < n; i++) {
            if (i) printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
    }
    return 0;
}

關鍵點

  • `abs()` 需 ``。
  • 插入排序天然穩定,適合「相同絕對值保持原序」要求。
  • `while(scanf(...)==1 && n)` 處理多組測試直至 EOF 或 n=0。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved