快速排序一听这个名字可能感觉很快,但是他的算法时间复杂度最坏情况却跟插入排序是一样的。之所以成为快速排序是因为他的平均效率比堆排序还要快,快速排序也是基于分治思想与归并排序差不多,但是快速排序是原址的,直接在原数组操作不需要再开辟新的存储空间。快速排序的思想很简单,就是选定一个关键字k将原数组分成两份g1与g2,g1中所有的元素都比k小或者相等,而g2中所有的数据都比k大或者等于,这样对g1与g2分别进行快速排序,最终我们得到的就是一个有序的数组。代码中的sort方法就是对刚才语句的描述。而关键的算法就是去寻找k的位置将原数组分为大小两部分的过程。方法getPlocation就是快速排序的核心。他的实现原理有点像插入排序只是有点像。每次都把map中end位置的元素作为关键字,通过与end元素对比将数组分成大小两部分,而i与j则是两个分割线,i与j之间的数都是比core大的元素,i与j就像一条贪吃蛇,当j的下一个数比core大的时候j+1,i到j的长度增大了,而如果比core小的话,i与j都向前走一下,并将那个小数放在i的前面。这样循环一遍后,start到end-1之间就是按大小分开的,最后将core放在中间,将core的位置返回就是分界线了。
public class QuickSort {
public int getPlocation(int[] map,int start,int end){
int core=map[end];
int i=start-1;
for(int j=start;j<=end-1;j++){
if(map[j]<=core){
i++;
int cache=map[j];
map[j]=map[i];
map[i]=cache;
}
}
i++;
map[end]=map[i];
map[i]=core;
return i;
}
public void sort(int[] map,int start,int end){
if(start<end){
int p=getPlocation(map, start, end);
sort(map, start, p-1);
sort(map,p+1,end);
}
}
public static void main(String[] args) {
int[] map=new int[]{4,1,5,3,7,12,65,7};
QuickSort qs=new QuickSort();
qs.sort(map, 0, map.length-1);
for (int i = 0; i < map.length; i++) {
System.out.println(map[i]);
}
}
}
分享到:
相关推荐
它采用分而治之的策略来提高排序效率,是许多编程语言中默认的排序算法之一。在Java中,快速排序广泛应用于对象排序,而对于基本数据类型则更倾向于使用其他算法,如双轴快速排序或插入排序。 ### 快速排序的基本...
4. **Java实现**:在Java中,可以创建一个方法`quickSort()`,接受一个整型数组和两个整数作为参数,表示要排序的数组和子数组的边界。在方法内部,先执行分区操作,然后对子数组进行递归调用`quickSort()`。 ```...
java快速排序,和随机优化快排 注解详细,多个版本可选,最简洁版、最高效率版、随机优化版...
- **尾递归优化**:当子数组大小小于某个阈值时,可以改用插入排序,因为对于小数组,插入排序可能更快。 通过理解和掌握这些知识点,你将能够实现并理解Java中的快速排序及其随机化版本,同时也能分析其性能和...
荷兰国旗问题和经典快排的不同之处就在于将改为了和=num两部分。借用这个思想,使得原来每次只可以让一个数找到正确的位置改进为了每次至少让一个数找到位置。 随机快排的改进地方只是在选取数的时候,将每次都选取...
http://blog.csdn.net/Holmofy/article/details/71168530 这篇文章的实现代码
迪杰斯特拉的三路切分的快排的改进版,Benly版本
在本资源中,包含了三个Java程序,分别是Sort.java(快速排序)、Factorial.java(阶乘计算)和Multiplication.java(9x9乘法表)。这三个程序涵盖了基础算法、数组操作和数学计算等核心Java编程概念。 1. **快速...
排序算法包 各种排序算法 java源 堆排序,快排等各种排序算法
### 并行快速排序Java实现解析 #### 一、引言 在计算机科学领域,并行计算作为一种提升程序执行效率的方法,被广泛应用于多种场景。快速排序(Quicksort)是一种非常高效的排序算法,在单线程环境下已经表现出色,...
《基于Java的车间调度智能排产集成框架设计源码解析》 在当今信息化时代,车间生产管理的智能化已经成为提升企业竞争力的重要手段。本项目提供的基于Java的车间调度智能排产集成框架,旨在解决传统车间生产过程中的...
在Java中实现三路快排,我们可以创建一个名为`Quickly3way`的类,其中包含一个用于排序的`sort`方法。这个方法首先选择一个基准值(通常选择数组的第一个元素),然后遍历数组,将小于、等于和大于基准值的元素分别...
在Java中实现倒排索引,可以利用标准库或者其他第三方库,如Apache Lucene,但这里我们主要讨论基于自定义代码的实现。 首先,我们需要理解倒排索引的基本原理。倒排索引由两部分组成:词典(Dictionary)和倒排...
在提供的"冒泡归并和快排"压缩包文件中,你将找到这些排序算法的Java实现,可以直接运行并观察它们的排序效果。这些源代码可以帮助你理解每种排序算法的工作原理,并在实践中应用它们。对于学习和提升Java编程技能,...
"xkzzz.com.txt"和"广而告之.txt"可能是关于某个特定网站的SEO实践或者是营销宣传的文本,可以学习到实际操作中的经验教训。 "源码必读.txt"可能包含了关于优化网站源代码的建议,如HTML和CSS的优化,这对提高网站...
之前做的四种排序动画,快排比较快,所以为快排专门做一个动画
Java编程中,排序算法是基础且重要的知识点,它主要负责对数据集进行排序,以便进行更高效的数据检索和处理。在给定的文档中,介绍了多种常见的排序算法,包括冒泡排序、快速排序、选择排序、插入排序等,并提供了...
1. **冒泡排序**:冒泡排序是最基础的排序算法之一,它通过不断交换相邻的逆序元素来逐渐将较大的元素“浮”到数组的前端。在Java中,冒泡排序的基本思路是使用两个for循环,外层循环控制比较的轮数,内层循环用于...
本文将深入探讨如何使用Java实现一个简单的倒排索引表,并结合布尔查询进行文本搜索。 首先,我们需要理解倒排索引的基本概念。倒排索引是从词到文档的映射,即它将每个词关联到包含该词的所有文档的列表。这种索引...
2. **索引(Index)**:创建倒排索引,将每个单词与包含该单词的文档对应起来,便于快速查找。 3. **查询解析器(QueryParser)**:将用户输入的查询字符串转化为索引中的搜索条件。 4. **搜索器(Searcher)**:根据查询...