排序算法之快速排序的思想以及Java实现
来源:互联网 发布:知乎 dota2 编辑:程序博客网 时间:2024/05/17 01:00
1 基本思想
快速排序是在冒泡排序的基础上改进而来的,它是基于分治的思想。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使得整个数据变成有序序列。
2,算法的实现(Java)
package Algorithm;public class QuickSort { /** * @param args */ public static void main(String[] args) { int[] data = new int[] {11,10,55,78,100,111,45,56,79,90,345,1000}; System.out.println("排序之前:"); QuickSort.output(data); System.out.println(); System.out.println("排序之后:"); QuickSort.qsort(data,0,data.length-1); QuickSort.output(data); } public static void qsort(int[] arr, int left, int right){ if(left < right){ int index = partition(arr,left,right);//讲数组分成两部分 qsort(arr,left,index-1);//递归排序左子数组 qsort(arr,index+1,right);//递归排序右子数组 } } private static int partition(int[] arr, int left, int right) { int key = arr[left];//设置关键数key为要排序数组的第一个元素 while(left<right){ while(left<right&&arr[right]>=key) --right; arr[left] = arr[right];//交换比key小的记录到左侧 while(left<right&&arr[left]<=key) left++; arr[right] = arr[left];//交换比key小的记录到右侧 } arr[left] = key; return left;//返回划分中间点,即,key右边的数全部比key大,key左边的数全部比key小 } //输出打印 public static void output(int[] arr){ for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+"\t"); } }}
最终结果显示如下:
3 性能分析
快速排序的效率与划分是否对称有关,而后者又与选择哪一个元素进行划分有关。最坏情况下,时间复杂度为O(n^2),此时两个区域分别包含n-1个元素和0个元素。最好的情况下,时间复杂度为O(nlog2n)。由于快速排序是递归的,需要一个栈来存放每一层递归调用的必要信息,最大容量与递归调用的深度一致。空间复杂度最好的情况为O(log2n),最坏的情况为O(n)。平均情况下,为O(log2n)。它是一种不稳定的排序。
0 0
- 排序算法之快速排序的思想以及Java实现
- 排序算法之希尔排序的思想以及Java实现
- 排序算法之冒泡排序的思想以及Java实现
- 排序算法之选择排序的思想以及Java实现
- 快速排序(基本思想以及算法实现)
- 排序算法之直接插入排序的思想以及Java实现
- 排序算法之折半插入排序的思想以及Java实现
- java常用的排序算法的思想以及实现
- 排序算法的思想分析以及java实现
- Java实现排序算法之快速排序
- 排序算法之快速排序 Java实现
- 排序算法之快速排序java实现
- 排序--快速排序算法的思想及其代码实现
- [排序算法]--快速排序的Java实现
- 快速排序的算法思想
- 排序算法之快速排序、归并排序(java实现)
- 快速排序基本思想以及代码实现
- 算法之快速排序----------用Java实现
- 线程变量 ThreadLocal
- bzoj1067 降雨量&&vijos1265 暴风雨
- 小九九乘法表
- 学习qt的图表绘制(一)
- fork vfork clone
- 排序算法之快速排序的思想以及Java实现
- RecylerView使用详解(分享整理)
- ubuntu16.04 实现SVN与WEB同步解决方案
- 新浪微博加号按钮动画实现方案
- android ViewPager 简单多线程加载本地图片
- c++之STL(13) STL 算法 - 查找算法(7)lower_bound() upper_bound() equal_range(0
- flex 对datagrid列表添加图片文本 itemRender
- 【学习笔记】比较符与equals
- 【NOIP2011模拟9.7】射命丸文