快速排序是一種高效的排序算法,使用分治法策略。它的基本思想是:選擇一個元素作為“基準”(pivot),重新排序數列,所有比基準值小的元素擺放在基準前面,所有比基準值大的擺在基準的后面。在這個分區退出之后,該基準就處于數列的中間位置。這個過程稱為分區(partition)操作。然后,遞歸地(recursive)把小于基準值元素的子數列和大于基準值元素的子數列排序。
Java版快速排序
public class QuickSort {public static void quickSort(int[] arr, int low, int high) {if (low < high) {int pivotIndex = partition(arr, low, high);quickSort(arr, low, pivotIndex - 1); // 對基準左邊的數組進行遞歸排序quickSort(arr, pivotIndex + 1, high); // 對基準右邊的數組進行遞歸排序}}private static int partition(int[] arr, int low, int high) {int pivot = arr[high];int i = (low - 1); // 小于基準的元素的索引for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;swap(arr, i, j);}}swap(arr, i + 1, high);return i + 1;}private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void main(String args[]) {int[] arr = {10, 7, 8, 9, 1, 5};int n = arr.length;quickSort(arr, 0, n - 1);System.out.println("Sorted array: ");for (int i : arr) {System.out.print(i + " ");}}
}
Kotlin版快速排序
fun quickSort(arr: IntArray, low: Int, high: Int) {if (low < high) {val pi = partition(arr, low, high)quickSort(arr, low, pi - 1)quickSort(arr, pi + 1, high)}
}fun partition(arr: IntArray, low: Int, high: Int): Int {val pivot = arr[high]var i = low - 1for (j in low until high) {if (arr[j] < pivot) {i++arr[i] = arr[j].also { arr[j] = arr[i] }}}arr[i + 1] = arr[high].also { arr[high] = arr[i + 1] }return i + 1
}fun main() {val arr = intArrayOf(10, 7, 8, 9, 1, 5)val n = arr.sizequickSort(arr, 0, n - 1)println("Sorted array: ${arr.joinToString(" ")}")
}
C版快速排序
#include <stdio.h>void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}int partition(int arr[], int low, int high) {int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}int temp = arr[i + 1];arr[i + 1] = arr[high];arr[high] = temp;return i + 1;
}int main() {int arr[] = {10, 7, 8, 9, 1, 5};int n = sizeof(arr) / sizeof(arr[0]);quickSort(arr, 0, n - 1);printf("Sorted array: ");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}
C++版快速排序
#include <iostream>void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}int partition(int arr[], int low, int high) {int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;std::swap(arr[i], arr[j]);}}std::swap(arr[i + 1], arr[high]);return i + 1;
}int main() {int arr[] = {10, 7, 8, 9, 1, 5};int n = sizeof(arr) / sizeof(arr[0]);quickSort(arr, 0, n - 1);std::cout << "Sorted array: ";for (int i = 0; i < n; i++) {std::cout << arr[i] << " ";}std::cout << std::endl;return 0;
}
Dart版快速排序
void quickSort(List<int> arr, int low, int high) {if (low < high) {int pivotIndex = partition(arr, low, high);quickSort(arr, low, pivotIndex - 1);quickSort(arr, pivotIndex + 1, high);}
}int partition(List<int> arr, int low, int high) {int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;swap(arr, i, j);}}swap(arr, i + 1, high);return i + 1;
}void swap(List<int> arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}void main() {List<int> arr = [10, 7, 8, 9, 1, 5];quickSort(arr, 0, arr.length - 1);print("Sorted array: $arr");
}
JavaScript版快速排序
function quickSort(arr, low, high) {if (low < high) {let pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}function partition(arr, low, high) {let pivot = arr[high];let i = low - 1;for (let j = low; j < high; j++) {if (arr[j] < pivot) {i++;swap(arr, i, j);}}swap(arr, i + 1, high);return i + 1;
}function swap(arr, i, j) {let temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}// 使用示例
let arr = [10, 7, 8, 9, 1, 5];
quickSort(arr, 0, arr.length - 1);
console.log("Sorted array:", arr);
匯編語言(Assembly Language asm)快速排序
以下是一個基本的 ARM 匯編語言快速排序算法示例,適用于運行 ARM 架構處理器的 Linux 系統。請注意,這個例子是針對 ARMv7 架構編寫的,可能需要根據你的具體 ARM 架構版本做出調整。
.global quicksort.data
array: .word 10, -1, 8, 3, 2, -5, 4
length: .word 7.text
quicksort:push {r4-r11, lr}mov r1, #0ldr r2, =lengthldr r2, [r2]subs r2, r2, #1bl partitionpop {r4-r11, pc}partition:push {r4-r11, lr}mov r11, r1mov r10, r0ldr r4, [r0, r2, lsl #2]
partition_loop:ldr r3, [r10, r11, lsl #2]cmp r3, r4addge r11, r11, #1blt swapcmp r11, r2blt partition_loopbl swappop {r4-r11, pc}swap:push {r4-r11, lr}ldr r3, [r10, r1, lsl #2]ldr r12, [r10, r11, lsl #2]str r12, [r10, r1, lsl #2]str r3, [r10, r11, lsl #2]pop {r4-r11, pc}
在這個示例中,quicksort
函數是快速排序算法的入口點,partition
是用于分區的函數,而 swap
函數用于交換數組中的兩個元素。這些函數使用 ARM 寄存器和指令來處理數組中的元素,并執行排序算法的步驟。
要運行這個程序,你需要在支持 ARM 架構的 Linux 系統上使用適當的匯編器和鏈接器。在不同的 ARM 架構版本(如 ARMv6、ARMv8)上,可能需要進行語法或指令集的調整。
請注意,這只是一個基本的示例,可能需要進一步的優化和調整以適應特定的需求和環境。