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

NOJ 冒泡排序輸出格式:題目要求選擇排序而非冒泡

     編輯:程式設計綜合問答

題目陷阱

標題「冒泡排序」,但輸出範例顯示:每輪將**最小值交換到前端**,屬於選擇排序過程。

輸出對比

// 冒泡排序 (大元素沉底)
輪1: 36 48 68 12 48 2 | 72
輪2: 36 48 12 48 2 | 68 72

// 選擇排序 (小元素浮頂) — 題目要求
輪1: 2 48 68 72 12 48 | 36
輪2: 2 12 68 72 48 | 36 48
...
最終: 2 12 36 48 48 68 72

正確實現 (選擇排序)

#include <stdio.h>
#define N 400

void printArray(int a[], int n, const char* prefix) {
    printf("%s(", prefix);
    for (int i = 0; i < n; i++) {
        if (i) printf(" ");
        printf("%d", a[i]);
    }
    printf(")\n");
}

int main() {
    int n, a[N];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);

    printArray(a, n, "Source:");

    printf("Bubble Sort:\n");  // 題目要求輸出這行
    for (int i = 0; i < n - 1; i++) {
        int minIdx = i;
        for (int j = i + 1; j < n; j++)
            if (a[j] < a[minIdx]) minIdx = j;
        if (minIdx != i) {
            int tmp = a[i]; a[i] = a[minIdx]; a[minIdx] = tmp;
        }
        // 輸出當前狀態:已排序部分 + 未排序部分
        printf("(");
        for (int k = 0; k < n; k++) {
            if (k) printf(" ");
            printf("%d", a[k]);
        }
        printf(")\n");
    }

    printArray(a, n, "Result");
    return 0;
}

關鍵輸出格式

  • Source: (48 36 68 72 12 48 2)
  • Bubble Sort: 後每行一個完整數組狀態,括號包裹,空格分隔。
  • Result (2 12 36 48 48 68 72)

避坑指南

  1. 仔細閱讀輸出範例,不要被標題誤導。
  2. 每輪輸出**整個數組**,而非僅交換的兩個元素。
  3. 最後一輪也要輸出(已有序)。
  4. 使用 printf 而非 cout 避免同步開銷超時。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved