快速排序
来源:互联网 发布:室内装修设计软件 编辑:程序博客网 时间:2024/06/13 02:46
一、概念
快速排序是对冒泡排序的一种改进:记录的比较和移动是从两端向中间进行的,关键码较大的记录一次就能从前面移动到后面,关键码较小的记录一次就能从后面移动到前面,记录移动的距离较远,从而较少了总的比较次数和移动次数。
基本思想:首先选取一个轴值(povit,即比较的基准),将待排序记录划分为独立的两部分,左侧记录的关键码均小于或等于轴值,右侧记录的关键码均大于或等于轴值,然后分别对两部分重复上述过程,直到整个序列有序。
二、复杂度
排序方法 最差时间分析 最好时间分析 平均时间复杂度 空间复杂度 稳定性 快速排序 O(n2) O(nlog2n) O(nlog2n) O(log2n)-O(n) 不稳定
三、代码实现
1 package sort; 2 3 public class QuickSort { 4 static int count = 1; 5 public static int partition(int[] array,int low, int high){ 6 //选取轴值 7 int key = array[low]; 8 while(low < high){ 9 //从后往前扫描10 while(array[high] >= key && low < high){11 high--;12 }13 //此时array[low]>=array[high],交换值14 array[low] = array[high];15 //从前往后扫描16 while(array[low] <= key && low < high){17 low++;18 }19 array[high] = array[low];20 }21 array[high] = key;22 printArray(array,count++);23 return high;24 }25 public void quicksort(int[] array, int low, int high){26 if(low >= high)27 return;28 int index = partition(array, low, high);29 quicksort(array,low,index-1);30 quicksort(array,index+1,high);31 32 }33 //打印每次排序的结果34 public static void printArray(int a[],int count){35 if(count != 0)36 System.out.print("第" + count + "次 ");37 for(int m = 0; m < a.length; m++){38 System.out.print(a[m] + " ");39 }40 System.out.println();41 }42 public static void main(String[] args) {43 QuickSort ms = new QuickSort();44 int array[] = {7, 2, 8, 3, 1, 6, 9, 0, 5, 4};45 ms.quicksort(array, 0, array.length-1);46 }47 }
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 【初等数论】【转载】夜深人静写算法(五)
- 京东2016年算法工程师笔试题
- Servlet的生命周期
- SSH框架搭建详细图文教程
- TensorFlow学习之CS20SI 之一
- 快速排序
- 度度熊与邪恶大魔王
- 金蝶K3 SQL报表系列-供应商科目余额表
- COM组件设计与应用之VC6中用ATL写组件
- sc2017新初三膜你赛4 比赛总结
- C++数据结构---链表(链表节点创建)
- 弄清楚作用域、执行上下文、变量对象、作用域链
- LintCode Python 合并排序数组
- 度度熊的01世界