快速排序法

程序你得看得懂 2024-03-20 06:38:19

快速排序是一种非常有效的排序算法,它使用了分而治之的策略。其工作原理是通过一个分割元素(也称为"基准"或"轴")将数组分成两个子数组,左侧的所有元素都小于等于基准,而右侧的所有元素都大于基准。然后,递归地对这两个子数组进行快速排序。

快速排序的基本步骤如下:

选择基准:在待排序的序列中选择一个元素作为基准,一般情况下,选择第一个元素或最后一个元素,但也可以随机选择。划分序列:将数组中小于基准的元素移动到基准的左边,大于基准的元素移动到基准的右边。这个操作完成后,基准就处于数组的中间位置,这个位置称为"基准的最后位置",左边的元素都比基准小,右边的元素都比基准大。注意,此处的左右都是指从基准元素视角的左右,不一定是整个数组的开头和结尾。递归操作:递归地对基准左右两侧的子数组进行上述两个步骤的操作。

以下是快速排序的Java实现示例:

public QuickSort { // 主要的函数,提供对外接口 public static void quickSort(int[] arr) { if (arr == null || arr.length < 2) { return; } process(arr, 0, arr.length - 1); } // 快速排序的主体函数,通过递归完成排序 public static void process(int[] arr, int L, int R) { if (L < R) { int p = partition(arr, L, R); // 找到基准点的位置 process(arr, L, p - 1); // 递归排序基准点的左侧数组 process(arr, p + 1, R); // 递归排序基准点的右侧数组 } } // 通过partition操作,返回基准点的位置 private static int partition(int[] arr, int L, int R) { // 选定基准点为最右侧的元素 int pivot = arr[R]; int index = L; for (int i = L; i < R; i++) { if (arr[i] < pivot) { swap(arr, i, index); index++; } } swap(arr, index, R); // 将基准点归位 return index; } // 交换数组中两个位置的值 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 = {3,1,4,1,5,9,2,6,5,3,5}; quickSort(arr); for(int i : arr){ System.out.print(i + " "); } } }

在上述代码中,我们首先对输入的数组进行检查,看其是否需要排序(长度小于2的数组已经是排序好的)。然后,我们调用process方法对数组进行递归排序。在process方法中,我们使用partition方法来找到基准元素的位置,并对基准的左侧和右侧的数组进行递归排序。partition方法通过将数组中的每个元素与基准元素进行比较,并根据需要移动元素,最后返回基准元素的位置。

0 阅读:0

程序你得看得懂

简介:感谢大家的关注