Java实现快速排序
来源:互联网 发布:优化软件点击 编辑:程序博客网 时间:2024/06/13 22:45
Java实现快速排序 引入随机性使得算法对所有的输入都能获得较好的期望性能
package cn.edu.sortalgorithm;import java.util.Random;public class QuickSort { /************快速排序***************************/ /*partition的作用是获得某一主元素的最终位置,使得该元素左边的数据不大于该元素,右边的数据不小于该元素*/ public static int partition(int array[], int left, int right){ /*快速排序引入随随机性,得到随机化的快排版本,使得算法对所有的输入都能获得较好的期望性能*/ Random random = new Random(); //生成left~right(包含边界)之间的一个随机整数 int randomIndex = random.nextInt(right-left+1) + left; //元素大小交换,保证随机性 int tmp = array[left]; array[left] = array[randomIndex]; array[randomIndex] = tmp; //选取主元 int tmpVal = array[left]; while(left < right){//从左右两边交替扫描知道left=right while(right > left && array[right] >= tmpVal){ right--; } array[left] = array[right]; while(left < right && array[left] <= tmpVal){ left++; } array[right] = array[left]; } array[left] = tmpVal;//将主元素放在其最终的位置上 return left; } public static void quickSort(int array[], int left, int right){ if(left < right){//待排序的元素至少有两个的情况 int pivot = partition(array, left, right); System.out.println(pivot); printArray(array); quickSort(array, left, pivot-1); quickSort(array, pivot+1, right); } } /********打印所有数组元素****************************/ public static void printArray(int array[]){ for(int k=0; k<array.length; k++){ System.out.print(array[k] + " "); } System.out.println(); } public static void main(String[] args) { int inputArray[] = {8000, 49, 38, 65, 97, 76, 13, 27, 49, 49, 55, 04, 49, 1000, -1}; System.out.println("the input array is : "); printArray(inputArray); quickSort(inputArray, 0, inputArray.length-1); System.out.println("the output array is : "); printArray(inputArray); } }
阅读全文
1 0
- java实现快速排序
- 快速排序Java实现
- 快速排序java实现
- 快速排序JAVA实现
- Java实现快速排序
- 快速排序--Java实现
- 快速排序java实现
- java实现快速排序
- java实现快速排序
- Java实现快速排序
- Java实现快速排序
- 快速排序java实现
- 快速排序Java实现
- Java实现快速排序
- java快速排序实现
- JAVA实现快速排序
- java实现快速排序
- java 实现快速排序
- java volatile与锁 个人理解
- CFS中的虚拟运行时间vruntime 的理解
- 启动tomcat失败,原因端口占用,但是不能通过结束服务关掉tomcat解决方法
- [施工...][业界良心]数论
- poj3734(矩阵快速幂)
- Java实现快速排序
- 查找
- Overlapping Rectangles
- 向上取整和向下取整
- How to install mysql 5.5 or 5.6 on ubuntu 16.04 xenial
- 学习笔记之面向对象编程23(多线程机制2)
- 接口自动化测试-xlrd模块处理表格文件
- Map Reduce操作步骤
- 通过分频器和乘法器来实现对频率的减倍和倍增效果