`
cuitongxin
  • 浏览: 26463 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAVA数据结构与算法 之 快速排序

 
阅读更多

JAVA 版本的快速排序,欢迎大家指正,谢谢!

 

/**
 * User: cuitongxin
 * Date: 13-3-31
 */
public class QuickSort {

    public static int[] a = {12,2,76,35,49,4,19,37,22,13,55,60,57,61,99,0,12,22};

    public static void main(String[] args) {

        quickSort(a,0,a.length-1);

        System.out.println(Arrays.toString(a));
    }

    /**
     * 快速排序的主算法,包括:获取中轴值索引位置,交换中轴值和数组最后一个位置的索引
     * @param a 需要排序的数组
     * @param startIndex 需要排序数组的起始索引
     * @param endIndex 需要排序数组的结束索引
     */
    private static void quickSort(int[] a, int startIndex, int endIndex) {
        if (endIndex <= startIndex)
            return ;

        //确定中轴点索引下标
        int pivotIndex = (startIndex + endIndex) / 2;

        //中轴点元素和数组最右边的元素互换位置,并且获取中轴的值
        swap(a,pivotIndex,endIndex);

        //第一次排序后中轴点的索引位置
        pivotIndex = partSort(a,startIndex,endIndex);

        quickSort(a,startIndex,pivotIndex-1);
        quickSort(a,pivotIndex+1,endIndex);
    }

    /**
     * 对数组做一次分割,是中轴值左边的元素小于中轴值,右边的元素大于等于中轴值
     * @param a 需要分割的数组
     * @param startIndex  开始索引
     * @param endIndex   结束索引,
     * @return 中轴值所在的索引位置 格式为:(数组左边 < 中轴值 <= 数组右边) 数组
     */
    private static int partSort(int[] a, int startIndex, int endIndex) {
        //先获取中轴元素
        int pivot = a[endIndex];

        //递增开始索引,同时递减结束索引, 使其向中间靠拢
        while (startIndex != endIndex) {

            //从左向右查找大于中轴值的元素并且返回下标索引
            while ((a[startIndex] < pivot) && (startIndex < endIndex)) {
                startIndex++;
            }

            //把比中轴元素大的元素防止在数组的空出位置--第一次循环是数组最右边
            //同时右边的索引下标 --
            if (startIndex < endIndex) {
                a[endIndex] = a[startIndex];
                endIndex--;
            }

            //从右边向左查找小于等于中轴的元素并返回下表
            while((a[endIndex] >= pivot) && (endIndex > startIndex)) {
                endIndex--;
            }

            //把比中轴元素小于等于的元素防止在数组的空出位置
            //同时左边的索引下标 ++
            if (endIndex > startIndex){
                a[startIndex] = a[endIndex];
                startIndex++;
            }
        }
        a[startIndex] = pivot;
        return startIndex;
    }

    private static int swap(int[] a, int middle, int i) {

        int temp = a[i];
        a[i] = a[middle];
        a[middle] = temp;

        return temp;
    }
}

 

分享到:
评论

相关推荐

    java数据结构与算法之快速排序详解

    主要介绍了java数据结构与算法之快速排序,结合实例形式详细分析了快速排序的原理、实现步骤、相关操作技巧与注意事项,需要的朋友可以参考下

    Java数据结构与算法编程基础全面系统教程

    JAVA数据结构与算法课程第05课双端链表和双向链表.mp4JAVA数据结构与算法...快速排序(1).mp4JAVA数据结构与算法课程第10课二叉树的基本概念.mp4JAVA数据结构与算法课程第11课二叉树的基本操作.mp4JAVA数据结构与算法...

    Java数据结构与算法学习笔记之排序

    Java数据结构与算法学习笔记之排序 冒泡排序,选择排序,插入排序,希尔排序, 归并排序, 快速排序.

    Java数据结构和算法中文第二版

    Java数据结构和算法介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解。全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、...

    尚硅谷Java数据结构与java算法(Java数据结构与算法).zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    java数据结构与算法第二版

    Java数据结构的类库 小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小...

    java数据结构与算法之奇偶排序算法完整示例

    主要介绍了java数据结构与算法之奇偶排序算法,较为详细的分析了奇偶算法的原理并结合完整示例形式给出了实现技巧,需要的朋友可以参考下

    java数据结构和算法实践

    以下是关于Java数据结构和算法的一些介绍: Java作为一种流行的编程语言,在数据结构和算法的实现方面有着广泛的应用。数据结构指的是在计算机中组织和存储数据的方式,算法则是明确定义的解决特定问题的规则和步骤。...

    Java数据结构和算法

    (10)数据结构之红黑树(三)——删除操作 (11)排序算法(一)——冒泡排序及改进 (12)排序算法(二)——选择排序及改进 (13)排序算法(三)——插入排序及改进 (14)排序算法(四)——归并排序与递归...

    【尚硅谷】数据结构与算法(Java数据结构与算法).zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    Java数据结构经典算法大全

    里面囊括了Java实用算法,如冒泡排序,快速排序,递归,矩阵算法等等

    数据结构java版 排序算法

    总结的不错,值得一看 * 1.插入排序(直接插入排序、折半插入排序、希尔排序);...交换排序(冒泡泡排序、快速排序); * 3.选择排序(直接选择排序、堆排序); * 4.归并排序; * 5.基数排序。

    java数据结构与算法.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    14天快速掌握Java数据结构与算法

    线性表 栈和队列 HashMap和LinkedHashMap 树 二叉树 图 图的遍历与最小生成树 图的最短路径与拓扑排序 算法简介 算法排序 排序与归并 递归与穷举 贪心和分治 动态规划和回溯

    java数据结构与算法

    第09讲 - 快速排序 第10讲 - 二叉树的基本概念 第11讲 - 二叉树的基本操作 第12讲 - 遍历二叉树 第13讲 - 删除二叉树节点 第14讲 - 红黑树 第15讲 - 哈希表 第16讲 - 开放地址法 第17讲 - 链地址法 第18讲...

    java数据结构与算法学习.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    随手笔记--数据结构与算法(Java)排序

    适用人群:本人文档是通过Java语言来编写数据结构中排序的算法,所以要具备一定Java编程基础。以及想要复习或者自学数据结构的小伙伴。 能学到什么:1.六个基础排序算法,分别是冒泡排序,选择排序,插入排序,希尔...

    数据结构与算法分析_Java语言描述(第2版)

    《数据结构与算法分析:Java语言描述(第2版)》是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。...

    Java数据结构与算法视频教程

    课程内容第一章: 数据结构与算法概述; 算法分析; 冒泡排序; 选择排序; 插入排序; 希尔排序; 归并排序;第二章: 快速排序; 排序稳定性分析; 顺序表; 链表;第三章: 栈; 队列; 符号表; 二叉查找树;第...

Global site tag (gtag.js) - Google Analytics