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
c4. << Previous Next >> c6.

c5.

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

  #include <stdio.h>          // 包含 printf 函數的標準輸入/輸出庫
  #include <stdlib.h>         // 包含動態記憶體分配的標準庫

  #define MAX_HEAP_SIZE 100   // 定義堆的最大大小

  // 交換堆中兩個元素的函數
  void swap(int *a, int *b) {
      int temp = *a;
      *a = *b;
      *b = temp;
  }

  // 插入元素後維護最大堆屬性的函數
  void heapifyDown(int arr[], int size, int index) {
      int leftChild = 2 * index + 1;   // 計算左子索引
      int rightChild = 2 * index + 2;  // 計算右子索引
      int largest = index;              // 假設當前節點是最大的

      // 求當前節點、左子節點、右子節點中最大的元素
      if (leftChild < size && arr[leftChild] > arr[largest]) {
          largest = leftChild;
      }

      if (rightChild < size && arr[rightChild] > arr[largest]) {
          largest = rightChild;
      }

      // 如果最大的元素不是當前節點,則與最大的子節點交換並繼續向下堆
      if (largest != index) {
          swap(&arr[index], &arr[largest]);
          heapifyDown(arr, size, largest);
      }
  }

  // 從數組建立最大堆的函數
  void buildMaxHeap(int arr[], int size) {
      // 從最後一個非葉節點開始,向下堆化到根
      for (int i = size / 2 - 1; i >= 0; i--) {
          heapifyDown(arr, size, i);
      }
  }

  // 顯示數組元素的函數
  void display(int arr[], int size) {
      printf("Array elements: ");
      for (int i = 0; i < size; i++) {
          printf("%d ", arr[i]);  // 列印數組中的每個元素
      }
      printf("\n");
  }

  int main() {
      // 使用隨機數組進行測試
      int randomArray[] = {6, 8, 12, 7, 1};               // 聲明一個隨機數組
      int randomSize = sizeof(randomArray) / sizeof(randomArray[0]);  // 計算數組的大小

      printf("Original Random Array:\n");
      display(randomArray, randomSize);  // 顯示原始隨機數組

      // 從隨機數組建立最大堆
      buildMaxHeap(randomArray, randomSize);

      printf("Max Heap from Random Array:\n");
      display(randomArray, randomSize);  // 顯示隨機數組中的最大堆

      // 使用排序數組進行測試
      int sortedArray[] = {19, 12, 8, 6, 2};              // 聲明一個排序數組
      int sortedSize = sizeof(sortedArray) / sizeof(sortedArray[0]);  // 計算數組的大小

      printf("\nOriginal Sorted Array:\n");
      display(sortedArray, sortedSize);  // 顯示原始排序數組

      // 從排序數組建立最大堆
      buildMaxHeap(sortedArray, sortedSize);

      printf("Max Heap from Sorted Array:\n");
      display(sortedArray, sortedSize);  // 顯示排序數組中的最大堆

      return 0;                         // 返回0表示執行成功
  }


c4. << Previous Next >> c6.

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