java 排序算法实现 其四:快速排序

来源:互联网 发布:软件外包公司分录 编辑:程序博客网 时间:2024/05/17 03:45


快速排序使用的思想是分治法,基本思想是选定一个基准值,所有大于它的值都放在左边,小于它的值都放在右边,递归实现整个数列的排序。


快速排序是一种性能比较优越的排序方法,平均的时间复杂度是O(nlogn),最坏的时候的复杂度是O(n^2)。


具体的步骤是:

1、从数列中挑出一个元素,称为 “基准”(pivot),

2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。





快速排序的实现,下面用代码说明:

Java版:

// 快排算法private void quickSort(int[] arr, int left, int right) {if (left < right) {int middleNum = getMiddle(arr, left, right); // 获取基准值所在的指针的位置quickSort(arr, left, middleNum - 1); // 对基准值左边的数列进行排序quickSort(arr, middleNum + 1, right); // 对基准值右边的数列进行排序}}// 获取基准值所在的指针的位置private int getMiddle(int[] arr, int left, int right) {int tmp = arr[left]; // 数组的第一个作为中轴while (left < right) {while (left < right && arr[right] >= tmp) {right--;}arr[left] = arr[right]; // 比中轴小的记录移到低端while (left < right && arr[left] <= tmp) {left++;}arr[right] = arr[left]; // 比中轴大的记录移到高端}arr[left] = tmp; // 中轴记录到尾return left; // 返回中轴的位置}




0 0