快速排序算法(Python、Java 和 JavaScript)

4 阅读2分钟

快速排序是一种经典的分治算法,其核心思想在于通过选定一个基准元素,将数组划分为两部分,使得左侧部分的所有元素均小于该基准元素,右侧部分的所有元素均大于该基准元素,随后递归地对左右两部分分别进行排序。

以下是分别使用 Python、Java 和 JavaScript 实现的快速排序算法代码:

Python 实现

def quick_sort(arr):
    # 如果数组长度小于等于 1,直接返回数组
    if len(arr) <= 1:
        return arr
    else:
        # 选择数组的第一个元素作为基准元素
        pivot = arr[0]
        left = []
        right = []
        # 遍历数组中除基准元素外的其他元素
        for i in range(1, len(arr)):
            if arr[i] <= pivot:
                left.append(arr[i])
            else:
                right.append(arr[i])
        # 递归地对左右两部分进行排序,并合并结果
        return quick_sort(left) + [pivot] + quick_sort(right)

# 测试代码
arr = [3, 6, 8, 10, 1, 2, 1]
sorted_arr = quick_sort(arr)
print(sorted_arr)

Java 实现

import java.util.Arrays;

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(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;
    }

    public static void main(String[] args) {
        int[] arr = {3, 6, 8, 10, 1, 2, 1};
        quickSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }
}

JavaScript 实现

function quickSort(arr) {
    // 如果数组长度小于等于 1,直接返回数组
    if (arr.length <= 1) {
        return arr;
    }
    // 选择数组的第一个元素作为基准元素
    const pivot = arr[0];
    const left = [];
    const right = [];
    // 遍历数组中除基准元素外的其他元素
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] <= pivot) {
            left.push(arr[i]);
        } else {
            right(arr[i]);
        }
    }
    // 递归地对左右两部分进行排序,并合并结果
    return [...quickSort(left), pivot, ...quickSort(right)];
}

// 测试代码
const arr = [3, 6, 8, 10, 1, 2, 1];
const sortedArr = quickSort(arr);
console.log(sortedArr);

以上代码分别用 Python、Java 和 JavaScript 实现了快速排序算法,你可以根据自己的需求选择合适的代码。