`
cuitongxin
  • 浏览: 27062 次
  • 性别: 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数据结构与算法中文版

    《Java数据结构与算法中文版》是一本深入探讨编程核心领域的书籍,主要针对Java程序员,旨在提升他们在数据处理和问题解决能力上的技能。这本书详细介绍了数据结构和算法的基础理论及其在Java语言中的实现,是Java...

    Java数据结构和算法.pdf

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

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

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

    Java数据结构与算法第二版源代码

    《Java数据结构与算法第二版源代码》是一个深入学习Java编程和算法的重要资源,它包含了丰富的实例和程序,旨在帮助开发者提升对数据结构和算法的理解与应用能力。在这个压缩包中,有两个主要的子文件:...

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

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

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

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

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

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

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

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

    JAVA数据结构与算法

    在编程领域,数据结构与算法是核心基础,对于任何编程语言,包括Java,理解并熟练掌握它们至关重要。本文将深入探讨Java中的数据结构与算法,旨在帮助开发者提升问题解决能力和程序设计技巧。 首先,我们来看数据...

    java数据结构与算法分析

    在编程领域,Java数据结构与算法分析是提升编程能力、优化程序效率的关键所在。本资料集专注于Java语言,深入探讨了各种数据结构和算法,旨在帮助Java开发者更好地理解和运用这些核心概念。 首先,数据结构是存储和...

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

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

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

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

    Java数据结构与算法

    本资源“Java数据结构与算法”显然是一份专注于这个主题的宝贵资料,包含了对数据结构和算法的深入探讨。 数据结构是指在计算机中组织和存储数据的方式,它决定了我们如何高效地访问和修改数据。在Java中,常见数据...

    java数据结构与算法1

    在IT行业中,Java数据结构与算法是编程人员必备的基础知识,尤其对于提升软件开发效率和优化解决方案至关重要。这里我们主要探讨的是"java数据结构与算法1"的相关知识点,结合提供的压缩包文件,我们可以深入学习...

    Java数据结构与算法(第二版)

    ### Java数据结构与算法(第二版) #### 数据结构概述 数据结构是计算机科学的一个核心概念,它主要关注如何在计算机程序中组织、管理和存储数据,以便可以高效地访问和修改这些数据。良好的数据结构选择能够极大...

    数据结构与算法(JAVA语言版)

    数据结构与算法是计算机科学的基础,对于理解和解决复杂问题至关重要。...通过阅读《数据结构与算法(JAVA语言版)》这本书,你将深入理解这些概念,并能熟练运用Java语言实现它们,从而提升你的编程能力。

    java数据结构与算法+applet与源码

    Java数据结构与算法是计算机科学中的核心组成部分,它关乎如何高效地存储和处理数据,以及设计和分析解决问题的计算步骤。在Java编程语言中,掌握数据结构与算法能帮助开发者编写出性能更优、可维护性更强的代码。...

Global site tag (gtag.js) - Google Analytics