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)的時間內完成排序,而且它不需要額外的內存空間,它是一種原地排序算法。