JAVA算法-快速排序
来源:互联网 发布:js两个对象数组合并 编辑:程序博客网 时间:2024/05/29 18:45
快速排序算法
快速排序算法原理:
个人理解,快速排序算法就是一个不断重复的二分法,将一个数组或列表分成两部分,选择一个基准元素,令左侧部分都比这个基准元素小,右侧部分都比基准元素大。然后对左右两部分递归调用,不断循环,从而得到一个有序的数组。
例如:有一个int数组{ 49, 38, 65, 97, 76, 13, 27, 50 }
1、首先选取第一个元素作为基准元素。index = 49
2、先从右向左顺序比对,只要遇到比49小的,就将49这个位置替换掉,然后调换顺序,从左向右开始比对。
3、从左向右顺序比对时,只要遇到比49大的,将上次替换者的位置替换掉,然后调换比对顺序。
执行步骤:
1、从后向前比对,遇到27 < 49时第一次替换。然后调换比对顺序
{ 27, 38, 65, 97, 76, 13, 27, 50 }
2、从前向后比对,遇到65 > 49,然后替换刚刚27的位置,调换顺序。
{ 27, 38, 65, 97, 76, 13, 65, 50 }
3、遇到13 < 49 替换刚刚65的位置,调换顺序
{ 27, 38, 13, 97, 76, 13, 65, 50 }
4、遇到97 > 49 替换刚刚13的位置,调换顺序
{ 27, 38, 13, 97, 76, 97, 65, 50 }
这时已经循环完毕后,将最后的替换者97 ,用49替换。
{ 27, 38, 13, 49, 76, 97, 65, 50 }
到现在一次二分循环就完成了。得到49左侧的都比49小,右侧的都比49大。
然后进行递归调用,将 {27, 38, 13}和{ 76, 97, 65, 50 }分别通过上述方法进行二分,最后全部循环完毕时就可以得到一个有序的数组。
具体代码如下:
public static void main(String[] args) throws Exception { int[] a = { 49, 38, 65, 97, 76, 13, 27, 50 }; // 传递数组,low表示要进行二分的起始位置,high表示结束位置 sort(a, 0, a.length-1); for (int v : a) { System.out.print(v + " "); }}public static void sort(int a[], int low ,int high){ int i = low; int j = high; int index = a[i]; if (low >= high){ return; } while (i<j){ if (i<j && a[j] >= index){ j--; } if (i<j){ a[i++] = a[j]; } if (i<j && a[i] <= index){ i++; } if (i < j){ a[j--] = a[i]; } } a[i] = index; sort(a,low,i-1); sort(a,i+1, high); }
- java快速排序算法
- Java快速排序算法
- Java快速排序算法
- Java快速排序算法
- java快速排序算法
- java快速排序算法
- JAVA快速排序算法
- java快速排序算法
- 快速排序算法(java)
- java快速排序算法
- java 快速排序算法
- Java算法快速排序
- java 快速排序 算法
- java快速排序算法
- java 快速排序 算法
- Java快速排序算法
- 快速排序算法java
- JAVA快速排序算法
- 明德扬FPGA-培训班公开课-第06期-《算法的verilog实现》第3次课
- 第13周 【项目二】 验证分块查找算法
- Linux下的shell入门
- Java工程师的终极书单
- 一站式WPF--线程模型和Dispatcher
- JAVA算法-快速排序
- 测试Python刷阅读量
- Android-广播
- orb_slam整体编程思路及代码解析(1)
- linux下ftp服务器的搭建
- nodejs 执行python脚本
- Nginx简介
- MonkeyJcript使用monkey循环操作一个场景
- Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)