博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序
阅读量:6621 次
发布时间:2019-06-25

本文共 2677 字,大约阅读时间需要 8 分钟。

快速排序主要使用递归思想,两种实现方式

1.快速排序代码实现(挖坑法)

package com.ch.interfacemanager.controller;import java.util.Arrays;public class QuickSort {    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;    }         public static void main(String[] args) {        int[] arr = new int[] {4,7,6,5,3,2,8,1};        quickSort(arr, 0, arr.length-1);        System.out.println(Arrays.toString(arr));    }}

2.快速排序代码实现(指针交换法)个人比较喜欢此种方法

package com.ch.interfacemanager.controller;import java.util.Arrays;public class QuickSort2 {    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;             while( left != right) {            //控制right指针比较并左移            while(left
pivot){ right--; } //控制right指针比较并右移 while( left

 

转载于:https://www.cnblogs.com/UncleWang001/p/10823702.html

你可能感兴趣的文章
PHP中双引号与单引号的区别(给新手)
查看>>
UE4里的全局变量,全局函数
查看>>
CYQ.Data 轻量数据层之路 华丽升级 V1.3出世(五)
查看>>
如何评估项目的开发时间
查看>>
5步让你入门MongoDB!
查看>>
困扰当前数据中心管理的三大难题
查看>>
tornado总结9-自动对gzip的请求进行解压
查看>>
下一代NoSQL:最终一致性的末日?
查看>>
为什么ARM的frq中断的处理速度比较快
查看>>
妹纸小A的计数工作
查看>>
syslog :: Bad file descriptor
查看>>
Linux&Unix下面的磁盘相关命令
查看>>
代码的坏味道
查看>>
Mysql多个端口设置
查看>>
转-推荐引擎记录1
查看>>
拼接菱形的冲突判定方法(二)
查看>>
进程和线程中的锁
查看>>
rebar3使用run_erl运行erlang项目
查看>>
Vim简明教程
查看>>
Session的生命周期
查看>>