TypeScript 陣列的快速排序(quickSort)

快速排序是一種排序演算法,它是由C. A. R. Hoare在1962年提出的。它的基本思想是:選擇一個基準值,通常是數組的第一個元素,然後將數組分成兩部分,一部分的所有元素都比基準值小,另一部分的所有元素都比基準值大,然後對兩部分分別遞歸地進行快速排序,直到數組的所有元素都有序為止。

TypeScript中的快速排序算法可以使用以下程式碼實現:

function quickSort(arr: number[], left: number, right: number): void {
    let i: number = left;
    let j: number = right;
    let temp: number;
    let pivot: number = arr[(left + right) / 2];

    while (i <= j) {
        while (arr[i] < pivot) {
            i++;
        }
        while (arr[j] > pivot) {
            j--;
        }
        if (i <= j) {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++;
            j--;
        }
    }

    if (left < j) {
        quickSort(arr, left, j);
    }
    if (i < right) {
        quickSort(arr, i, right);
    }
}

上面的程式碼中,我們使用了一個基準值,它是數組的中間元素,然後將數組分成兩部分,一部分的所有元素都比基準值小,另一部分的所有元素都比基準值大。然後對兩部分分別遞歸地進行快速排序,直到數組的所有元素都有序為止。

快速排序的時間複雜度是O(nlogn),它是一種非常有效的排序算法,可以用於大量數據的排序。

快速排序的優點是它的時間複雜度低,它可以在O(nlogn)的時間內完成排序,而且它不需要額外的內存空間,它是一種原地排序算法。

但是,快速排序也有一些缺點,它的時間複雜度取決於基準值的選擇,如果基準值不適當,它的時間複雜度就會變得很高,可能會變成O(n2)。另外,快速排序是一種不穩定的排序算法,它會改變相同元素的相對順序。

總的來說,快速排序是一種非常有效的排序算法,它可以在O(nlogn)的時間內完成排序,而且它不需要額外的內存空間,它是一種原地排序算法。

Categorized in:

Tagged in: