阿摩線上測驗 登入

申論題資訊

試卷:111年 - 111 經濟部所屬事業機構_新進職員甄試_統計資訊:1.資料庫及資料探勘 2.程式設計#111347
科目:國營事業◆1.資料庫及資料探勘 2.程式設計
年份:111年
排序:0

申論題內容

六、快速排序法(Quick Sort)是排序演算中的一種,處理過程是先選擇一個資料為基準點,所有 比基準點小的元素放在左邊,比基準點大的元素放在右邊,之後再反覆對基準點左右兩邊 的數列執行相同的處理,直到數列只剩一個數值或沒有數值時即完成排序。請撰寫一函式 QuickSort(),將傳入的一維陣列利用快速排序法,由小至大排序陣列元素。(20 分)

詳解 (共 1 筆)

詳解 提供者:hchungw

以下是用 Python 實現的 QuickSort 函式,用於將傳入的一維陣列利用快速排序法,由小至大排序陣列元素:

python
def quick_sort(arr):
    # 定義快速排序的主函式
    def _quick_sort(items, low, high):
        if low < high:
            # 獲取分割點
            pivot_index = partition(items, low, high)
            # 對左子陣列進行遞迴排序
            _quick_sort(items, low, pivot_index)
            # 對右子陣列進行遞迴排序
            _quick_sort(items, pivot_index + 1, high)
    # 定義分割函式
    def partition(items, low, high):
        pivot = items[low]  # 選擇最左邊的元素為基準點
        left = low + 1
        right = high
        done = False
        while not done:
            while left <= right and items[left] <= pivot:
                left += 1
            while items[right] >= pivot and right >= left:
                right -= 1
            if right < left:
                done = True
            else:
                # 交換左右兩個不符合條件的元素
                items[left], items[right] = items[right], items[left]
        # 交換基準點元素與右指針所指元素
        items[low], items[right] = items[right], items[low]
        return right
    # 調用主函式
    _quick_sort(arr, 0, len(arr) - 1)
    return arr
# 測試範例
sample_array = [34, 7, 23, 32, 5, 62]
sorted_array = quick_sort(sample_array)
print("排序後的陣列:", sorted_array)
 
  1. quick_sort 函式

    • 主函式 quick_sort 接受一個一維陣列 arr,並調用內部的 _quick_sort 函式對陣列進行排序。
  2. _quick_sort 函式

    • _quick_sort 是實現快速排序的主遞迴函式。它接受一個子陣列範圍(由 low 和 high 指定),並對該範圍內的元素進行排序。
    • 如果 low < high,則調用 partition 函式進行分割,並獲取分割點 pivot_index。
    • 然後對基準點左右兩邊的子陣列分別進行遞迴排序。
  3. partition 函式

    • partition 函式負責選擇基準點(本例中選擇最左邊的元素),並將陣列分割為兩部分:一部分包含所有小於等於基準點的元素,另一部分包含所有大於基準點的元素。
    • 它通過左右指針 left 和 right 遍歷陣列,並交換不符合條件的元素,直到所有元素都正確分割到基準點兩側。
    • 最後,將基準點元素與右指針所指的元素交換,並返回基準點的位置 right。

測試

在範例測試中,我們使用一個樣本陣列 [34, 7, 23, 32, 5, 62] 進行排序。調用 quick_sort 函式後,輸出排序後的陣列為 [5, 7, 23, 32, 34, 62]。