快速排序(Java),前辈帮看看有木有啥问题
来源:互联网 发布:java应聘笔试题 编辑:程序博客网 时间:2024/06/08 03:34
public class QuickSort{ public static void main(String args[]) { int[] a={1,3,5,7,9,2,4,6,8,10,11,15,18,0,3,5,7,9,2,4,6,8,10,11,15,18,0,3,5,7,9,2,4,6,8,10,11,15,1}; quickSort(a,0,a.length-1); for(int i=0;i<a.length;i++) { System.out.print(a[i]+" "); } } private static final int CUTOFF = 6; private static void quickSort(int[] a, int left, int right) { if(left+CUTOFF<=right)//right-left>=CUTOFF { //找出枢轴点,并将它放在数组最后面的位置 int pivot= median3(a, left, right); int i = left, j = right - 1; while (true) { //将i, j分别移到大于/小于枢纽值的位置 /*因为数组的第一个和倒数第二个元素分别小于和大于枢纽元,所以不会发生数组越界*/ while (a[++i]<pivot){} while (a[--j]>pivot){} //交换 if (i < j) { swap(a,i,j); } else break; } //将枢纽值与i指向的值交换 swap(a,i,right-1); //对枢纽值左侧和右侧数组继续进行快速排序 quickSort(a, left, i-1); quickSort(a, i+1 , right); } else{ insertSort(a,left,right); } } public static void insertSort(int[] a,int left,int right) { System.out.print("left:"+left+" "); System.out.println("right:"+right); for(int i = left+1 ; i <= right ; i ++) { int j; int temp=a[ i ]; for ( j = i ; j >= 1 && a[ j - 1 ] > temp; j-- ) a[ j ] = a[ j - 1 ]; a[ j ] = temp; } } /** *在数组obj中选取枢纽元,选取方法为取数组第一个、中间一个、最后一个元素中中间的一个。将枢纽元置于倒数第二个位置,三个中最大的放在数组最后一个位置,最小的放在第一个位置 */ private static int median3(int[] a, int left, int right) { int center = (left + right) / 2; if (a[left]>a[center]) { swap(a,left,center); } if (a[left]>a[right]) { swap(a,left,right); } if (a[center]>a[right]) { swap(a,center,right); } //将枢纽元置于数组的倒数第二个 swap(a,center,right-1); return a[right-1]; } public static void swap(int[] a,int i,int j) { int temp=a[i]; a[i]=a[j]; a[j]=temp; }}
输出:
left:0 right:2
left:4 right:9
left:11 right:14
left:16 right:17
left:19 right:22
left:24 right:26
left:28 right:33
left:35 right:38
0 0 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 15 15 15 18 18
照着《数据结构算法与分析》来的,但是上面的代码都零零碎碎的,这里贴个整的,前辈们看下我这个补漏之后的快排有什么问题吗?
- 快速排序(Java),前辈帮看看有木有啥问题
- 请大家帮我看看Java的锁的问题。
- 请前辈们帮我解决下问题!!谢谢!!
- 菜鸟的问题,希望各位前辈帮我解答一下!
- 前辈们帮我解决一个问题吧
- JAVA高手帮我看看这道题呗!
- 帮我看看是什么问题呢,为什么读网页源文件会有乱码java
- 用java模仿ATM(记录的功能似乎有点问题,哪位老大帮我看看)
- 帮我看看这个程序吧,好像问题很多呀
- 帮我看看,是个存储过程问题
- ubuntu安装问题,大家帮我看看啊~~
- 帮我看看我的代码有什么问题
- 请帮我看看这个程序有啥问题?
- 请大家帮我看看是哪里出了问题?
- 大家帮我看看这个php语句有什么问题
- 请大神帮我看看这是什么问题
- 请大神帮我看看这是什么问题
- 请大神帮我看看这是什么问题
- 腾讯的战略纵深:颠覆支付宝三步曲
- 《重构》——如何如何改善代码
- Xcode使用大全和快捷键
- ORACLE replace和translate函数详解
- android expandablelistview
- 快速排序(Java),前辈帮看看有木有啥问题
- android 自动调整屏幕分辨率
- 数据结构排序算法
- c# 关闭MessageBox 或者自动关闭MessageBox
- Android震动vibrator(马达)--系统到驱动的流程
- Linux 性能分析工具(vmstat,iostat,sar)
- 转载:中国与美国的货币发行机制
- [Android]bootchart
- JSTL标签的用法详解