/**
快速排序 :我对快速排序的理解 我们的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 public class QuickSort { public int partition(int[] a, int i, int j) { int key = a[i]; while (i ) { while (i [j] >= key) { j--; } a[i] = a[j]; while (i [i] ...
在描述中提到,“java实现的排序,根据C语言排序改写”,这暗示了教程可能包括了如何将C语言中的经典排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序等,转化为Java代码的过程。这对于初学者来说是...
下面是一个简单的Java实现: ```java public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low ) { // 找到基准元素的正确位置 int pivotIndex = partition(arr, low,...
本篇将详细讲解如何使用Java实现快速排序。 首先,理解快速排序的步骤至关重要。快速排序的主要步骤包括: 1. **选择枢轴元素(Pivot Selection)**:在待排序的数组中选取一个元素作为枢轴,通常选择第一个或最后...
根据给定文件的信息,本文将围绕“用Java实现快速排序”的主题进行展开,不仅解析标题与描述中的核心知识点,还会对部分代码示例进行解读,最后结合这些信息给出一个完整的快速排序算法实现。 ### 快速排序算法简介...
快速排序 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码 快速排序.java 使用java实现的代码
根据给定文件中的标题、描述、标签...综上所述,通过对给定文件的分析,我们不仅理解了如何使用Java实现快速排序算法,还深入了解了该算法的工作原理、性能特点以及优化方法,这对于理解和掌握快速排序具有重要意义。
在Java中,我们可以创建一个名为`Qsort`的类来实现快速排序。这个类包含两个主要方法:`sort`和`partition`。`sort`方法是快速排序的递归入口,`partition`方法则是快速排序的核心,它负责将数组分为两部分,并返回...
总之,这个Java实现的快速排序演示项目不仅提供了排序算法的实现,还考虑到了教育和演示的需求,通过可视化工具帮助用户更好地理解和学习快速排序的工作机制。通过深入研究这个项目,可以加深对快速排序以及分治策略...
下面我们将详细地讲解快速排序算法的java代码实现。 快速排序算法的基本思想 快速排序算法的基本思想是选择一个pivot元素,将数组分成两个部分,一部分元素小于pivot,一部分元素大于pivot,然后递归地对这两个...
在这个Java实现中,我们将详细探讨快速排序的工作原理,代码结构,以及如何通过源码理解和运用这个工具。 快速排序的步骤如下: 1. **选择基准元素(Pivot Selection)**:首先,从数组中选择一个元素作为“基准”...
### JAVA实现的快速排序 #### 知识点详解 **一、快速排序算法介绍** 快速排序(Quick Sort)是一种非常高效的排序算法,采用分治法(Divide and Conquer)策略来把一个序列分为较小和较大的两个子序列,然后递归...
下面是一个简单的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,简单易懂,适合算法初学者。
此外,开发者也可能使用自定义排序算法,如快速排序、冒泡排序等,根据特定需求进行定制。 5. **文件操作**: 数据的写入可能使用了`FileWriter`和`BufferedWriter`,将排序后的单词重新写入文件。这有助于保存...
Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术...
这个方法使用了快速排序或归并排序算法,具体取决于元素类型和JVM实现。要对自定义对象进行排序,你需要确保你的类实现了Comparable接口或者提供一个Comparator对象来定义比较规则。 ```java public class MyObject...