排序(3)--快速排序
来源:互联网 发布:程序员 计算器 编辑:程序博客网 时间:2024/05/18 02:11
最近去面试,都考到了排序,考的比较多的是快速排序,发现自己代码实现能力还是很次啊,赶紧抓紧学起来~
1.基本思想
选择一个基准元素(通常是第一个元素或者最后一个元素,当然也可以选择几个值的均值或中值,例如,取第一个,中间的,最后一个的中值),通过一趟扫描,将待排序的分成两部分,一部分比基准元素小,一部分大于基准元素。此时基准元素再其排好序的正确位置(一般是中间),然后再利用同样的方法递归地排序。
2.举例
这里举例是一趟扫描后,基准元素在中间,其左边数都比基准元素小;其右边的都比基准元素大。然后再分别对左右两边采用同样的方法,这里不再赘述。
3.复杂度
时间复杂度O(nlogn),空间复杂度O(nlogn)
不稳定
当n较大的时候使用快排比较好,但是当基本有序的时候,使用快排反而不好
4.实现
package learn_and_exercise;public class quick { public static void main (String[] args) { int [] a = {57,68,59,52,72,28,96,33,24,19}; System.out.println("快速排序的结果是:"); quickSorted(a,0,a.length - 1); printscreen(a); } //快速排序 /** * * @param number * @param low * @param high */ public static void quickSorted(int []number , int low , int high) { if (low < high) { int middle = getMiddle(number,low,high); quickSorted(number,0,middle - 1);//递归 quickSorted(number,middle + 1,high); //分别对低字段表和高字段表进行递归排序 } } private static int getMiddle(int[] number, int low, int high) { // TODO Auto-generated method stub int temp = number[low];//基准元素 while (low < high) { //找到比记住元素小的元素位置 while ((low < high) && number[high] >= temp) { high -- ; } number[low] = number[high]; while((low < high) && number[low] <= temp) { low++; } number[high] = number[low]; } number[low] = temp; return low; } private static void printscreen(int[] a) { // TODO Auto-generated method stub int len = a.length; for (int i = 0;i < len;i++) { System.out.print(a[i]+ " "); } System.out.println();}}
0 0
- 排序(3)--快速排序
- 3-排序-快速排序
- 排序(希尔排序,堆排序,归并排序,快速排序)
- 排序(插入排序,希尔排序,归并排序,快速排序)
- 排序算法3-快速排序
- 数据结构-排序(3):快速排序
- 排序总结(快速排序)
- 排序(之快速排序)
- 快速排序(java排序)
- wikioi1076 排序(快速排序)
- 排序(5)快速排序
- c++排序(快速排序)
- 排序(二)快速排序
- 排序(2)快速排序
- 排序(4)快速排序
- 快速排序-(交换排序)
- 算法(3)快速排序
- 交换排序(冒泡排序、快速排序)
- Android-动画效果
- 用C#做个简单的登录界面
- hdu 1069 动规 Monkey and Banana
- linux tab 不能自动补全 上下键乱码
- Leetcode-403.Frog Jump(青蛙跳石头)
- 排序(3)--快速排序
- flume-ng单节点搭建
- 蓝桥杯_C语言_本科B——李白打酒
- VoxelGrid滤波器对点云降采样,并使用PCLVisulizer进行显示
- 平台
- ubuntu的sh文件编程(三)
- 同余运算及其基本性质
- 相机的快门
- Android Telephony系统 之 DataConnectionTracker与MobileDataStateTracker之间的通信