四、快速排序
来源:互联网 发布:gameloft java游戏 编辑:程序博客网 时间:2024/06/02 02:56
1、算法原理
快速排序首先需要选取一个数(通常选择数组的第一个数)作为关键数据,然后将所有比它小的数都放在它的前面,所有比它大的数放在它后面。此算法最优的时间复杂度是O(nlogn),最差时间复杂度是O(n^2),平均时间复杂度为O(nlogn);此算法使用的空间是O(1)的,但是因为递归调用,所以最优的空间复杂度是O(logn)(每次都平分数组),最差的空间复杂度为O(n)。快速排序是不稳定的排序算法。
2、Java代码实现
注:本程序设计生成10个随机数,再对这10个随机数进行从小到大的排序
/* * 排序算法:快速排序 * 作者:xiaoxiao * 日期:2017-07-13 */import java.util.Random;public class QuickSort { public static void main(String[] args){ int[] arr = new int[10];//定义可以存10个数的数组 int[] rs = new int[10]; init(arr); System.out.print("排序前:"); for(int i = 0; i < arr.length; i++){ System.out.print(arr[i]+" "); } System.out.println(); rs = quickSort(arr, 0, arr.length-1); System.out.print("排序后:"); for(int i = 0; i < rs.length; i++){ System.out.print(rs[i]+" "); } } public static void init(int[] a){ Random r = new Random(); for(int i=0; i<a.length; i++){ a[i] = r.nextInt(100); } } public static int[] quickSort(int[] a, int low, int high){ int l = low; int h = high; int povit = a[low]; //选择数组的第一个数作为比较数 while(l < h){ while(l < h && a[h] >= povit){ //从最右边开始,如果大于比较数,则h标记左移 h--; } if(l < h){ //这时该数小于比较数,则交换a[h]和a[l]的值 a[h] = a[l] + 0 * (a[l] = a[h]); l++; } while(l < h && a[l] <= povit){ //从左边开始,如果小于比较数,则l标记右移 l++; } if(l < h){ //这时该数大于比较数,交换a[h]和a[l]的值 a[h] = a[l] + 0 * (a[l] = a[h]); h--; } if(l > low){ quickSort(a, low, l-1); } if(h < high){ quickSort(a, l+1, high); } } return a; }}
运行结果:
阅读全文
0 0
- (四)快速排序
- 四、快速排序
- 四、快速排序
- 快速排序----(排序算法四)
- 排序算法(四):快速排序
- 从排序开始(四)快速排序
- 内部排序(四)快速排序法
- 排序算法(四):快速排序
- 排序算法(四)-- 快速排序
- Java排序算法(四):快速排序
- 排序(四)之快速排序
- 排序七部曲之(四)快速排序
- 排序算法(四)快速排序算法
- 内部排序之四:归并排序和快速排序
- 快速排序(quickSort)四种经典实现
- 数据库结构算法四:快速排序
- (四)快速排序-python实现
- 浅谈算法和数据结构: 四 快速排序
- 会java的你,能找出其中的问题吗
- asp网站在IIS布局
- 解读continuous control with deep reinforcement learning(DDPG)
- ps call
- StringUtils常用方法+StringUtils详细介绍
- 四、快速排序
- 通过读取/proc/cpuinfo获取CPU信息
- 学习笔记-volatile
- JavaScript JSON 简易教程
- python函数的参数问题
- 【初级算法剖析】超大文件获取顺序相关数据问题
- layui只是一件漂亮的衣裳,别人看着挺漂亮,其实本质没变
- BOM和DOM的使用及对应方法
- Spark Broadcast之TorrentBroadcast