快速排序
来源:互联网 发布:百利进销存软件网络版 编辑:程序博客网 时间:2024/06/16 22:41
简单说一下实现原理:
如图,从数组左边(index= 1)遍历到数组最右(index= array.length-1)。选第一位(index= 0)作为target将数组分为两半。f为分解点,f之前的(包含f)都比第一位小,之后的都比第一位大。当完成遍历后,数组将被分为两半,最后将index = f的元素与index= 0的元素交换位置,便完成了快速排序的第一步。之后只要对 f 的两边进行递归,当递归到底了,便完成了快速排序。
(有点含糊。。还是看代码吧 (~ ̄▽ ̄)~ )
/** * 快速排序实现 * * @author 煎鱼 * */public class QuickSort { public static void Sort(int[] arr) { Sort(arr,0,arr.length-1); } public static void Sort(int[] arr , int left , int right) { if(left>=right)return;//先判断是否递归到底!!! //随机选一个数与第一个数交换,作为第一个作比较的数 //swap(0,(int) (Math.random()*arr.length),arr); int num = arr[left];//记下要比较的值 int index = left;//index为上述的f,用于将数组分为两半 //关键代码: 遍历数组,如果比num大,则i++,如果比num小,则与index位置交换 //然后index++,即往前移一位 for(int i = left+1; i <= right; i++) { if(arr[i]<num) { swap(++index,i,arr); } } swap(index,left,arr);//最后交换 //递归 Sort(arr,left,index-1); Sort(arr,index+1,right); } //交换位置 public static void swap(int i, int j, int[] arr) { int z = arr[j]; arr[j]=arr[i]; arr[i] = z; } //测试: public static void main(String[] args) { int[] arr = new int[10000000]; for(int i = 0 ; i<10000000 ; i++) { arr[i]=(int) (Math.random()*arr.length); } Sort(arr); System.out.println("finish"); }}
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- pandas
- 14.5.2.3 一致性非阻塞读
- 258. Add Digits
- android theme.appcompat.light找不到资源的错误
- Mysql查询语句使用select.. for update导致的数据库死锁分析
- 快速排序
- C++数据结构:二叉树(一)——先序建立二叉树
- angular4学习笔记(一)
- python 对象
- source insight 代码对齐
- Vue2 后台管理系统解决方案
- Redis列表
- 爬虫学习01 requests入门 response的常用方法 response.text 和response.content的区别
- 我的游戏程序员学习之路