算法——快速排序算法

Posted Java学习基地Java毕设定制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法——快速排序算法相关的知识,希望对你有一定的参考价值。

快速排序的原理:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素。一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果没有继续比较下一个,直到找到第一个比基准值小的值才交换。找到这个值之后,又从前往后开始比较,如果有比基准值大的,交换位置,如果没有继续比较下一个,直到找到第一个比基准值大的值才交换。直到从前往后的比较索引>从后往前比较的索引,结束第一次循环,此时,对于基准值来说,左右两边就是有序的了。

public class 快排 {
public static void quickSort(int[] arr, int startIndex, int endIndex) { // 递归结束条件:startIndex大等于endIndex的时候 if (startIndex >= endIndex) { return; } // 得到基准元素位置 int pivotIndex = partition(arr, startIndex, endIndex); // 用分治法递归数列的两部分 quickSort(arr, startIndex, pivotIndex - 1); quickSort(arr, pivotIndex + 1, endIndex); } private static int partition(int[] arr, int startIndex, int endIndex) { // 取第一个位置的元素作为基准元素 int pivot = arr[startIndex]; int left = startIndex; int right = endIndex; // 坑的位置,初始等于pivot的位置 int index = startIndex; //大循环在左右指针重合或者交错时结束 while ( right >= left ){ //right指针从右向左进行比较 while ( right >= left ) { if (arr[right] < pivot) { arr[left] = arr[right]; index = right; left++; break; } right--; } //left指针从左向右进行比较 while ( right >= left ) { if (arr[left] > pivot) { arr[right] = arr[left]; index = left; right--; break; } left++; } } arr[index] = pivot; return index; }}

以上是关于算法——快速排序算法的主要内容,如果未能解决你的问题,请参考以下文章

一行Python代码搞定快速排序算法

排序算法 | 快速排序(含C++/Python代码实现)

十大经典排序算法总结(快速排序)

算法浅谈——分治算法与归并快速排序(附代码和动图演示)

四种排序算法实现

快速排序算法详解及代码实现