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

快速排序算法的JAVA实现

阅读更多

package Utils.Sort;  
  
/** 
 
*快速排序,要求待排序的数组必须实现Comparable接口 
 
*/  
  
public class QuickSort implements SortStrategy  
  
{    private static final int CUTOFF = 3;             //当元素数大于此值时采用快速排序  
  
       /** 
 
       *利用快速排序算法对数组obj进行排序,要求待排序的数组必须实现了Comparable接口 
 
       */  
  
       public void sort(Comparable[] obj)  
  
       {   if (obj == null)  
  
              {  throw new NullPointerException("The argument can not be null!");  
  
              }  
  
              quickSort(obj, 0, obj.length - 1);  
  
       }  
  
       /** 
 
       *对数组obj快速排序 
 
       *@param obj 待排序的数组 
 
       *@param left 数组的下界 
 
       *@param right 数组的上界 
 
       */  
  
       private void quickSort(Comparable[] obj, int left, int right)  
  
       {    if (left + CUTOFF > right)  
  
              {     SortStrategy ss = new ChooseSort();  
  
                     ss.sort(obj);  
  
              }  else  
  
              {   //找出枢轴点,并将它放在数组最后面的位置  
  
                     pivot(obj, left, right);  
  
                     int i = left, j = right - 1;  
  
                     Comparable tmp = null;  
  
                     while (true)  
  
                     {    //将i, j分别移到大于/小于枢纽值的位置  
  
                            //因为数组的第一个和倒数第二个元素分别小于和大于枢纽元,所以不会发生数组越界  
  
                            while (obj[++i].compareTo(obj[right - 1]) < 0)    {}  
  
                            while (obj[--j].compareTo(obj[right - 1]) > 0)      {}  
  
                           //交换  
  
                            if (i < j)  
  
                            {  tmp = obj[i];  
  
                                   obj[i] = obj[j];  
  
                                   obj[j] = tmp;  
  
                            }  
  
                            else    break;  
  
                     }  
  
                     //将枢纽值与i指向的值交换  
  
                     tmp = obj[i];  
  
                     obj[i] = obj[right - 1];  
  
                     obj[right - 1] = tmp;  
  
                     //对枢纽值左侧和右侧数组继续进行快速排序  
  
                     quickSort(obj, left, i - 1);  
  
                     quickSort(obj, i + 1, right); }  
  
       }  
  
       /** 
 
       *在数组obj中选取枢纽元,选取方法为取数组第一个、中间一个、最后一个元素中中间的一个。将枢纽元置于倒数第二个位置,三个中最大的放在数组最后一个位置,最小的放在第一个位置 
 
       *@param obj 要选择枢纽元的数组 
 
       *@param left 数组的下界 
 
       *@param right 数组的上界 
 
       */  
  
       private void pivot(Comparable[] obj, int left, int right)  
  
       {  int center = (left + right) / 2;  
  
              Comparable tmp = null;  
  
              if (obj[left].compareTo(obj[center]) > 0)  
  
              {  tmp = obj[left];  
  
                     obj[left] = obj[center];  
  
                     obj[center] = tmp;  
  
              }  
  
              if (obj[left].compareTo(obj[right]) > 0)  
  
              {  tmp = obj[left];  
  
                     obj[left] = obj[right];  
  
                     obj[right] = tmp;  
  
              }  
  
              if (obj[center].compareTo(obj[right]) > 0)  
  
              { tmp = obj[center];  
  
                     obj[center] = obj[right];  
  
                     obj[center] = tmp;  
  
              }  
  
              //将枢纽元置于数组的倒数第二个  
  
                tmp = obj[center];  
  
              obj[center] = obj[right - 1];  
  
              obj[right - 1] = tmp;  
  
       } }
 
分享到:
评论

相关推荐

    快速排序算法JAVA实现

    在Java中,我们可以创建一个名为`Qsort`的类来实现快速排序。这个类包含两个主要方法:`sort`和`partition`。`sort`方法是快速排序的递归入口,`partition`方法则是快速排序的核心,它负责将数组分为两部分,并返回...

    快速排序算法的java实现

    以下是快速排序算法的步骤: 1. **选择基准**:从数组中选取一个元素作为基准,可以选择第一个、最后一个或者随机选择。 2. **分区操作**:遍历数组,将所有小于基准的元素移到其前面,大于基准的元素移到其后面。...

    快速排序算法java代码

    "快速排序算法java代码" 快速排序算法是由Tony Hoare在1960年提出的一种排序算法,它的平均时间复杂度为O(n log n),是目前最快的排序算法之一。下面我们将详细地讲解快速排序算法的java代码实现。 快速排序算法的...

    Java实现快速排序算法+编程知识+技术开发

    Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术...

    分别使用Java和Python实现快速排序算法.zip

    快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法....

    各种排序算法比较(java实现)

    `Algorithm.java`文件可能包含了这些排序算法的Java实现代码,而`常见排序算法的实现与性能比较.doc`文档则可能详细比较了这些算法的性能和适用场景。`readme.txt`文件可能是对整个项目的简要说明,包括如何运行和...

    基数排序算法 java实现

    然而,它并不适用于浮点数或非整数类型的数据,且如果数据量较小,基数排序可能不如其他简单排序算法(如快速排序或归并排序)高效。在实际应用中,我们需要根据具体情况来选择最适合的排序算法。

    各种排序算法java实现

    在提供的文件中,我们可以看到有四种经典的排序算法的Java实现:插入排序、冒泡排序、选择排序以及希尔排序。 **插入排序**: 插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据...

    JAVA冒泡排序和快速排序算法

    在JAVA中,实现这两种排序算法可以使用面向对象的特性,创建一个类如`MaopaoKuaisu.java`,在这个类中定义两个方法,分别实现冒泡排序和快速排序。类的结构可能如下: ```java public class MaopaoKuaisu { public...

    基于 Java 实现的快速排序算法(java 实现方式)

    【作品名称】:基于 Java 实现的快速排序算法(java 实现方式) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于 ...

    排序算法JAVA实现,eclipse+txt

    在IT领域,排序算法是计算机科学中的核心概念,特别是在数据结构和算法分析中。Java作为一种广泛应用的编程语言,提供了丰富的...这个资料包中的Java实现和Eclipse工程,可以帮助开发者深入理解和实践这些排序算法。

    常见的七大排序算法Java实现.zip

    本压缩包"常见的七大排序算法Java实现.zip"包含了七种经典的排序算法在Java语言中的实现。尽管文件列表中并未明确列出每种排序算法的名称,但根据常规,这七大排序算法可能包括冒泡排序、插入排序、选择排序、快速...

    内部排序算法java实现

    这里我们将深入探讨Java实现的几种内部排序算法,包括希尔排序、快速排序、堆排序、归并排序、冒泡排序、插入排序和选择排序。 首先,希尔排序是一种基于插入排序的算法,通过将原始数组分解成多个子序列来提高效率...

    快速排序算法及其Java实现

    内容概要:本文详细介绍了快速排序算法的概念与实现方式。快速排序由英国计算机科学家Tony Hoare于1960年提出,是一种基于分治策略的高效排序方法。本文主要讲解了快速排序的工作原理,同时提供了一段详细的Java语言...

    快速排序算法实现java

    快速排序算法实现,随机输入一组数有序输出,用java语言实现

    IT面试笔试-各种排序算法Java实现

    【IT面试笔试中的排序算法Java实现】 在IT面试和笔试中,掌握各种排序算法的实现是必不可少的技能。本文将详细介绍几种经典的排序算法,并提供Java语言的实现代码,包括冒泡排序、插入排序、选择排序和快速排序。...

    常用排序算法java演示

    本文将深入探讨标题"常用排序算法java演示"中涉及的知识点,包括排序算法的原理、Java实现方式以及其在实际应用中的图形演示。 首先,让我们逐一了解几种常见的排序算法: 1. **冒泡排序(Bubble Sort)**:这是一...

    java 快速排序 折半查找的界面实现 (递归与分治法)

    总的来说,快速排序和折半查找是计算机科学中不可或缺的算法,通过递归和分治策略,可以在Java中高效地实现这些算法,并结合界面设计,为用户提供直观的交互体验。在实际项目中,理解和掌握这些算法有助于优化数据...

Global site tag (gtag.js) - Google Analytics