`
lxy2330
  • 浏览: 468433 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

快速排序_Java实现

    博客分类:
  • java
阅读更多
/**
 快速排序 :我对快速排序的理解 我们的while循环的作用是给标准元素(一般取a[low])找到一个合适的位置 它前面的元素都大于它,
它后面的元素都小于它。那具体是如何实现的呢?我们用俩个变量 i,j来 "卡" 合适的位置,i,和j就像俩个监视器一样,i的移动保证,它一路走来
每个元素都是比temp小的,j的移动保证它一路走来都是比temp大的。 刚开始的时候
就把要排序的元素保存到了temp中,而且整个过程都保存在temp里,这样就好像给数组打开了缺口(最左边的元素已经没什么用了可以被
别的元素覆盖掉)从右端开始扫描数组,如果比temp大是应该的 放过j--不用管很正常,一旦碰到比它大的东西这本来应该在它左边啊?对把它放到左边!放到那啊?刚才那个元素已经没用了就用它覆盖a[i],这个元素比temp小已经比较了,i++,然后开始扫描数组的左端,如果比temp小是应该的,不用管
  * i++放过,反之就应该放到temp右边,同理a[j]已经保存到a[i]中了没什么用了,正好把a[i]覆盖掉a[j],
  * 这个元素比temp大已经比较了,所以j--, 我说过之所以能这样覆盖来覆盖去是因为,一开始
  * 数组就有一个空位,遇到的第一个小的覆盖掉原有数据,遇到的第一个大的覆盖掉上面那个位置,然后再遇到
  * 比它小的继续覆盖,总是覆盖上一个缺口,留下一个缺口,当i,j重合即卡住了temp的正确位置! 在对另外的俩个子区间进行如上的排序!
  */
 public static void quickSort(int[] a, int low, int high) {
  int n = a.length;
  int i = low;
  int j = high;

  int temp = a[low];
  while (i < j) {
   
   // 必须从右边开始扫描,否则从左边开始扫描遇到一个比它大的元素时(左边不是有一个空位吗?但是放到左边肯定是不合适) 应该放到右边,放到哪里呢,放到任何地方都会覆盖掉一个数据 这样没有利用上这个缺口 严重错误
   while (i < j && a[j] >= temp) {
    j -- ;//放过
   }
   if(i<j) {
    a[i] = a[j] ;
    i ++ ; //放过,并开始左端循环
   }
   while(i < j && a[i] < temp) { //注意 :" < " 而不是 <=这个细节说明即使和temp相等也要放到它的后面这样保证了-在数值相同时 ,保持原有顺序的原则!
    i ++ ;
   }
   if(i < j) {
    a[j] = a[i] ;
    j -- ;
   }
  }
  a[i] = temp ;
  //有可能i=low 如 :a[low]是最小的,一开始循环就一直j-- 一直减到了i ==j 然后赋值(即它本来就应该在第一位),也有可能a[low]是最大的,一直i++到high。如果是这样就不用对那个子区间排序了,所以下面用if语句
  if(i > low) quickSort(a, low, i-1) ;
  if(i < high) quickSort(a , i+1, high) ;
  
 }
 public static void main(String[] args) {
  
  int [] a = {-2, 67,89 ,308,1299,2008,-289,90,101,-34,145,93,0,2028,713};
  quickSort(a, 0 , a.length-1) ;
  print(a) ;
 }
 //为了打印数组的方便 增加一个方法print()
 public static void print(int [] a) {
  int n = a.length ;
  for(int i=0;i<n;i++) {
   System.out.print(a[i] + "  ") ;
   if((i+1) % 5 == 0) {
    System.out.println() ;
   }
  }
  System.out.println( ) ;
 } 

分享到:
评论

相关推荐

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

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

    快速排序 java实现

    快速排序 java实现

    JAVA实现快速排序

    JAVA实现快速排序 快速排序是一种高效的排序算法,它的实现可以分为两个部分:基本思想和复杂度分析。在基本思想中,快速排序采用“分而治之”的思想,把大的拆分为小的,小的拆分为更小的,直到序列中的所有记录均...

    快速排序的java实现

    以下是一个简单的Java实现: ```java public class QuickSort { public int partition(int[] a, int i, int j) { int key = a[i]; while (i ) { while (i [j] &gt;= key) { j--; } a[i] = a[j]; while (i [i] ...

    pdf_排序_java语言改写c_

    在描述中提到,“java实现的排序,根据C语言排序改写”,这暗示了教程可能包括了如何将C语言中的经典排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序等,转化为Java代码的过程。这对于初学者来说是...

    快速排序算法的java实现

    下面是一个简单的Java实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low ) { // 找到基准元素的正确位置 int pivotIndex = partition(arr, low,...

    快排序的Java实现

    本篇将详细讲解如何使用Java实现快速排序。 首先,理解快速排序的步骤至关重要。快速排序的主要步骤包括: 1. **选择枢轴元素(Pivot Selection)**:在待排序的数组中选取一个元素作为枢轴,通常选择第一个或最后...

    用java实现快速排序

    根据给定文件的信息,本文将围绕“用Java实现快速排序”的主题进行展开,不仅解析标题与描述中的核心知识点,还会对部分代码示例进行解读,最后结合这些信息给出一个完整的快速排序算法实现。 ### 快速排序算法简介...

    快速排序.java 使用java实现的代码

    快速排序 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码

    用JAVA语言实现的对数据的快速排序法

    根据给定文件中的标题、描述、标签...综上所述,通过对给定文件的分析,我们不仅理解了如何使用Java实现快速排序算法,还深入了解了该算法的工作原理、性能特点以及优化方法,这对于理解和掌握快速排序具有重要意义。

    快速排序算法JAVA实现

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

    java实现快速排序演示

    总之,这个Java实现的快速排序演示项目不仅提供了排序算法的实现,还考虑到了教育和演示的需求,通过可视化工具帮助用户更好地理解和学习快速排序的工作机制。通过深入研究这个项目,可以加深对快速排序以及分治策略...

    快速排序算法java代码

    下面我们将详细地讲解快速排序算法的java代码实现。 快速排序算法的基本思想 快速排序算法的基本思想是选择一个pivot元素,将数组分成两个部分,一部分元素小于pivot,一部分元素大于pivot,然后递归地对这两个...

    快速排序java实现

    在这个Java实现中,我们将详细探讨快速排序的工作原理,代码结构,以及如何通过源码理解和运用这个工具。 快速排序的步骤如下: 1. **选择基准元素(Pivot Selection)**:首先,从数组中选择一个元素作为“基准”...

    JAVA实现的快速排序

    ### JAVA实现的快速排序 #### 知识点详解 **一、快速排序算法介绍** 快速排序(Quick Sort)是一种非常高效的排序算法,采用分治法(Divide and Conquer)策略来把一个序列分为较小和较大的两个子序列,然后递归...

    java实现快速排序

    下面是一个简单的Java实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low ) { int pivotIndex = partition(arr, low, high); quickSort(arr, low...

    快速排序的Java实现方法QuickSort

    快速排序的Java实现方法QuickSort,简单易懂,适合算法初学者。

    DisorderOfWord_Javaword单词重新排序_

    此外,开发者也可能使用自定义排序算法,如快速排序、冒泡排序等,根据特定需求进行定制。 5. **文件操作**: 数据的写入可能使用了`FileWriter`和`BufferedWriter`,将排序后的单词重新写入文件。这有助于保存...

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

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

    Java 对象排序详解.rar_java 对象排序_对象_排序

    这个方法使用了快速排序或归并排序算法,具体取决于元素类型和JVM实现。要对自定义对象进行排序,你需要确保你的类实现了Comparable接口或者提供一个Comparator对象来定义比较规则。 ```java public class MyObject...

Global site tag (gtag.js) - Google Analytics