【算法】JAVA快速排序法实现
来源:互联网 发布:centos supervisor 编辑:程序博客网 时间:2024/06/15 19:52
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
public class QuickSort { public static void main(String[] args) { //测试数据 int[] iArgs = {5,4,9,2,8,3,1,7}; int left = 0; //数组第一个位置 int right = iArgs.length - 1;//数组最后一个位置; QuickSort quickSort = new QuickSort(); //快速排序 quickSort.recursive(iArgs,left,right); //输出数组 for(int i = 0; i < iArgs.length; i++) {System.out.print(iArgs[i] + " "); } } /** * 递归循环数据 * * @param args 数组 * @param left 数组左下标 * @param right 数组右下标 * @return */ private void recursive(int[] args,int left,int right) { if( left < right) { //数据从left到right坐标的数据进行排序 int iIndex = qucikSort(args,left,right); //iIndex 是基数放在数据位置 //递归算法,对于基数左边排序 recursive(args,left,iIndex-1); //为什么left不能从0 //递归算法,对于基数右边排序 recursive(args,iIndex+1,right);//为什么 right不等于length } } /** * 确定基数左边的数都比它小,右边的数都比它大 * * @param args 数组 * @param left 数组左下标 * @param right 数组右下标 * @return */ private int qucikSort(int[] args,int left,int right) { int iBase = args[left];; //基准数 while (left < right) { //从右向左找出第一个比基准数小的数 while( left < right && args[right] >= iBase) { right--; } args[left] = args[right]; //从左向右找出第一个比基准数小的数 while( left < right && args[left] <= iBase) { left++; } args[right] = args[left]; } args[left]= iBase; return left; }}
另一种写法:
public class QuickSort {/** * @param args */public static void main(String[] args) {int[] array = {10, 20, 15 , 16, 18 , 17, 12, 13, 19, 11, 14};QuickSort(array, 0, array.length - 1);for(int i = 0; i < array.length; i++){System.out.print(array[i]+" ");}}private static void QuickSort(int[] array, int low, int high) {if(low < high){int position = Partition(array, low, high);QuickSort(array, low, position-1);QuickSort(array, position+1, high);}}private static int Partition(int[] array, int low, int high) {int start = low;int end = high + 1;int compare = array[low];int tmp;while(true){while(array[++start] < compare && start < high);while(array[--end] > compare);if(start >= end) break;tmp = array[start];array[start] = array[end];array[end] = tmp;}array[low] = array[end];array[end] = compare;return end;}}
0 0
- 【算法】JAVA快速排序法实现
- java实现快速排序算法
- java实现快速排序算法
- 算法-快速排序-java实现
- 快速排序算法Java实现
- java算法实现快速排序
- java实现快速排序算法
- 快速排序算法-java实现
- 快速排序算法Java实现
- 快速排序算法java实现
- java实现快速排序算法
- Java实现快速排序算法
- 快速排序算法Java实现
- Java实现快速排序算法
- 快速排序算法java实现
- java实现快速排序算法
- Java 实现快速排序算法
- 快速排序算法java实现
- 黑马程序员Android第55期—— XML 实例二
- c语言中的指针总结
- 将bmp图像转换为CCS可以识读的dat文件,Matlab实现
- Gradle初体验
- endnote中设置参考文献格式的几篇blog
- 【算法】JAVA快速排序法实现
- Android SDK的目录结构及功能
- 自动恒温灌溉组态软件
- get/post方式调用http接口
- 调用webservice手机归属地查询
- 《统计学习方法,李航》:9、EM算法及其推广(2)
- C语言 函数定义及调用
- CSS3中 @font-face用法介绍
- Think in Java(六):接口