Java排序算法5:快速排序
来源:互联网 发布:淘宝个性家具店铺名字 编辑:程序博客网 时间:2024/06/08 14:19
一.思想:
对冒泡排序算法的一种改进。通过一趟排序将排序的数据分割成两个部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分分别再进行快速排序,依次类推。实现为:
1.开始时先设两个变量i=Start,j=End;
2.以第一个元素作为中间点,pivot=num[i];
3.以j--的形式从后向前搜索,找到第一个比pivot小的,则将num[i] = num[j]
4.以i++的形式从前向后搜索,找到第一个比pivot大的,则将num[j]=num[i];
5.不断重复3,4,直到i=j,最后使得num[i]=pivot;
这样就可以把小于pivot的值全部放在pivot前面,把大于pivot的值全部放在pivot后面。
二.例子:
比如5,6,4,2,3,
1.pivot=5,i=0,j=5。用j--先从后往前开始搜索,发现3<5,则执行num[i]=num[j],执行后序列为3,6,4,2,3,
2.用i++从前开始搜索,当i=1时num[1]=6<5,执行num[j]=num[i],执行后序列为3,6,4,2,6,
3.再用j--从后往前搜索,当j=4时,num[j]=2<5,则执行num[i]=num[j],执行后序列为3,2,4,2,6
4.再用i++从前往后搜索,一直到i=j,没有发现比pivot小的数,则执行num[i]=pivot,此时序列为3,2,4,5,6.
这样一趟循环,就可以以5为分界线,小于5的值全在5左边,大于5的值全部在5右边。
第二趟,第三趟以此类推。
三.实现代码:
public class QuickSort {public static void main(String args[]){int num[] = {4,3,6,9887,5,3,2,3,1,988,0,0};System.out.println("排序前输出:");print(num);QuickSort(num,0,11);System.out.println("排序后输出:");print(num);}public static void QuickSort(int num[],int Start,int End){int i = Start;int j = End;int flag = num[Start];while(i < j){while( (i < j) && (num[j] >= flag) )j--;num[i] = num[j];while((i < j) && (num[i] <= flag) )i++;num[j] = num[i];}num[i] = flag;if( (i - Start) > 1)QuickSort(num,Start,i - 1);if( (End - i) > 1 )QuickSort(num,i + 1, End);}public static void print(int num[]){int i;for(i = 0; i < num.length; ++i){System.out.print(num[i]+" ");}System.out.print("\n");}}
四.复杂度与应用:
时间复杂度为:O(nlogn) 空间复杂度为O(1) 是不稳定的排序算法。
应用:一般情况下,该算法是最快的排序算法(某些情况下有比这个算法更快的算法),适用于大部分场合,但是如果数据量巨大,比如说几百万条时,就可能会发生堆栈溢出的错误,所以当数据量巨大的时候,可以考虑堆排序,归并排序等等。
五.参考资料:
1.追竹的博客:http://blog.csdn.net/apei830/article/details/6586811
2.百度百科-快速排序:http://baike.baidu.com/view/19016.htm?fromId=115472&fr=wordsearch
六:相关排序代码下载:包含(冒泡排序,桶排序,堆排序,插入排序,归并排序,快速排序,基数排序,选择排序,希尔排序)
免积分下载地址:http://download.csdn.net/detail/u014077165/7185895
- Java排序算法5:快速排序
- Java排序算法 快速排序
- 算法:排序----Java快速排序
- Java排序算法:快速排序
- Java排序算法:快速排序
- Java排序算法--》快速排序
- JAVA排序算法---快速排序
- Java排序算法--快速排序
- java快速排序算法
- Java快速排序算法
- Java快速排序算法
- Java快速排序算法
- java快速排序算法
- java快速排序算法
- JAVA快速排序算法
- java快速排序算法
- 快速排序算法(java)
- java快速排序算法
- 天脉云产品思路与总结
- 虚继承问题
- Qt: Session management error: None of the authentication protocols specified are supported
- 采用WordPress在服务器搭建博客
- 用程序证明c的getchar并未将回车放入缓存,放进去的是换行!
- Java排序算法5:快速排序
- 数据仓库相关
- 一些reactiveCocoa资料:
- Java高性能缓冲设计 vs Disruptor vs LinkedBlockingQueue
- 快速排序的一种实现
- Leetcode: Path Sum 理解分析
- Cocos2D-X事件处理机制之触屏事件
- 字符串中的替换空格
- Android NinePatch图片