cyg41223103 cp2023

  • Home
    • SMap
    • reveal
    • blog
  • About
  • Brython
  • w15
    • Q2
    • Q1
  • 作業內容
    • W3
    • W4
    • w5
    • w6
      • 台灣國旗
      • 日本國旗
      • 美國國旗
      • 英國國旗
      • 韓國國旗
      • 中國國旗
    • W7
    • W10
    • W13
  • ANSI C
    • c1.
    • c2.
    • c3.
    • c4.
    • c5.
    • c6.
    • c7.
    • c8.
    • c9.
    • c10.
  • C_EX
    • ex1.
    • ex2.
    • ex3.
    • ex4.
    • ex5.
    • ex6.
    • ex7.
    • ex8.
    • ex9.
    • ex10.
  • NOTE
    • ssh
c5. << Previous Next >> c7.

c6.

從隨機數組和排序數組構造最小堆

#include <stdio.h>

// 用於堆化以節點 i 為根的子樹的函數,該節點是 arr[] 中的索引
void minHeapify(int arr[], int n, int i) {
    int smallest = i;  // 將最小的初始化為 root
    int left = 2 * i + 1;  // 左子節點
    int right = 2 * i + 2; // 右子節點

    // 如果左子節點小於根
    if (left < n && arr[left] < arr[smallest])
        smallest = left;

    // 如果右子節點小於目前為止最小的子節點
    if (right < n && arr[right] < arr[smallest])
        smallest = right;

    // 如果最小的不是根
    if (smallest != i) {
        // 將找到的最小元素與根交換
        int temp = arr[i];
        arr[i] = arr[smallest];
        arr[smallest] = temp;

        // 遞歸地堆化受影響的子樹
        minHeapify(arr, n, smallest);
    }
}

// 從數組建立最小堆的函數
void buildMinHeap(int arr[], int n) {
    // 從最後一個非葉子節點開始,以相反的順序堆疊所有節點
    for (int i = n / 2 - 1; i >= 0; i--)
        minHeapify(arr, n, i);
}

// 列印數組的函數
void printArray(int arr[], int n) {
    for (int i = 0; i < n; ++i)
        printf("%d ", arr[i]);
    printf("\n");
}

// 測試堆構造函數
int main() {
    // 使用隨機數組進行測試
    int randomArray[] = {4, 10, 3, 5, 1};
    int n1 = sizeof(randomArray) / sizeof(randomArray[0]);

    printf("Original Random Array: ");
    printArray(randomArray, n1);

    // 建構堆
    buildMinHeap(randomArray, n1);

    printf("Min Heap from Random Array: ");
    printArray(randomArray, n1);

    printf("\n");

    // 使用排序數組進行測試
    int sortedArray[] = {8, 7, 5, 4, 2};
    int n2 = sizeof(sortedArray) / sizeof(sortedArray[0]);

    printf("Original Sorted Array: ");
    printArray(sortedArray, n2);

    // 建構堆
    buildMinHeap(sortedArray, n2);

    printf("Min Heap from Sorted Array: ");
    printArray(sortedArray, n2);

    return 0;
}


c5. << Previous Next >> c7.

Copyright © All rights reserved | This template is made with by Colorlib