`
cuitongxin
  • 浏览: 27272 次
  • 性别: 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数据结构与算法.pdf

    Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点进行详细解释。 1. **数据结构**: - **稀疏数组**:当大量数据中大部分为零或...

    Java数据结构和算法.pdf

    资源摘要信息是关于Java数据结构和算法的知识点总结,涵盖了数组、栈与队列、链表、递归、哈希表、高级排序、二叉树、红黑树、堆、带权图等数据结构和算法概念。 一、数组 * 数组是相同类型变量的集合,可以使用...

    C、C++、JAVA数据结构与算法电子书

    数据结构与算法是计算机科学的基础,对于理解和编写高效软件至关重要。C、C++和Java都是广泛使用的编程语言,它们在处理数据结构和算法时各有特点。以下是对这三种语言在数据结构与算法方面的一些关键知识点的详细...

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

    4. **排序与查找**:包括经典的排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等)和查找算法(线性查找、二分查找)。这些是任何程序员都应该掌握的基础知识。 5. **树结构**:书中会详细...

    Java 数据结构与算法+源代码 高清版

    这份“Java数据结构与算法+源代码高清版”资源旨在帮助开发者深入理解并掌握这些关键概念。 首先,让我们来探讨数据结构。数据结构是组织和存储数据的方式,它为算法提供了基础。常见的数据结构包括数组、链表、栈...

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

    根据提供的信息,“Java数据结构和算法中文第二版”这本书主要关注的是数据结构与算法的相关内容。下面将基于这些信息,详细介绍数据结构与算法的核心概念、重要性和应用领域,以及在Java编程环境中如何实现这些概念...

    数据结构与算法代码详解JAVA版

    在Java中,我们可以使用各种算法来解决实际问题,例如排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等)、查找算法(顺序查找、二分查找、哈希查找)以及图论中的最短路径算法(Dijkstra算法...

    Java数据结构和算法(第二版)+源代码+Applets

    Java数据结构和算法是计算机科学中的核心概念,对于任何Java开发者来说,理解和掌握它们都是至关重要的。本资源包“Java数据结构和算法(第二版)+源代码+Applets”为学习者提供了一个全面且深入的学习平台,涵盖了...

    Java数据结构和算法-带书签目录扫描版

    《Java数据结构和算法-带书签目录扫描版》是一本深入探讨Java编程语言中数据结构和算法的书籍。此扫描版特别包含了完整的书签目录,使得读者在电子版阅读时能够快速定位到所需章节,提高了学习和查阅的效率。 在...

    java 数据结构与算法视频

    Java 数据结构与算法是计算机科学的核心部分,它们是编写高效、优化代码的基础。在这个视频教程中,我们将深入探讨这些关键概念,以便提升你的编程技能。数据结构是存储和组织数据的方式,而算法则是解决问题或执行...

    Java数据结构和算法(第二版)+随书源代码+applet小程序

    《Java数据结构和算法(第二版)》是一本专为希望深入理解Java编程中的数据结构与算法的读者设计的书籍。这本书的特点是从基础知识逐步引导读者进入复杂领域,通过结合实际的Applet小程序,使得理论知识变得生动直观。...

    数据结构与算法(Java语言版)含有源码

    本资源包含两部分:一本名为“数据结构与算法(JAVA语言版)”的PDF教程和一个“源码.zip”压缩包,提供了相关的Java实现。 1. 数据结构:数据结构是组织和存储数据的方式,它直接影响到算法的效率。常见的数据结构...

    【超全!】图解Java数据结构和算法(共195集)【资料+视频+课件+代码+笔记】

    稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、...

    JAVA数据结构和算法+面试题

    阅读《Java数据结构和算法 第二版》和解答《JAVA经典算法40题》可以帮助你深入理解和实践。同时,《JAVA面试题》提供了真实的面试场景,让你提前熟悉可能遇到的问题,提高应试能力。 总之,Java数据结构和算法是...

    Java数据结构和算法(第二版),算法经典案例(C语言)

    《Java数据结构和算法(第二版)》与《算法经典案例(C语言)》这两本书是IT领域的宝贵资源,尤其对于初学者和希望在面试中脱颖而出的开发者来说,它们提供了深入理解数据结构和算法的基础。数据结构是编程的核心,它...

Global site tag (gtag.js) - Google Analytics