快速排序之java实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序之java实现相关的知识,希望对你有一定的参考价值。
据说一般的笔试或面试都会考考排序,今天就试着想自己实现一把,看了原理后,发现没那么容易,又去网上找了下,发现评论都说作者的代码有问题。这更激起了我的兴趣。
遂坚持编写出来并进行了测试,应该没有问题,如有问题 希望留言评论
快速排序的理论和算法的评价就不粘贴了,网上一查一大堆,在这只写代码
1 public class QuickSort { 2 @Test 3 public void sort(){ 4 int[] a = { 5, 8, 6, 2, 7, 9, 1, 7, 3 }; 5 //int[] a = {3, 1, 2, 5, 7, 9, 6, 4, 8}; 6 7 sort(a, 0, a.length-1); 8 System.out.println(Arrays.toString(a)); 9 } 10 11 private void sort(int[] a, int start, int end) { 12 int i=start; 13 int j=end; 14 int key = a[i]; 15 int tmp; 16 while (j > i) {//向左遍历 17 while (j > i && a[j] >=key) 18 j--; 19 if (a[j] < key) { 20 tmp = a[j]; //key存在了a[j]中 21 a[j] = a[i]; 22 a[i] = tmp; 23 } 24 while (j > i && a[i] <= key) 25 i++; 26 if (a[i] > key) { 27 tmp = a[i]; 28 a[i] = a[j]; 29 a[j] = tmp; 30 } 31 } 32 if(j<end)sort(a,j+1,end); 33 if(i>start)sort(a,start,i-1); 34 } 35 36 }
说说几个我觉得注意的问题:
- sort()的形参start,end要赋值给i,j.因为我们要通过下标交换数组中的元素。而且最后还要用到start,end。所以不能直接用start,end操作。
- 思想无非就是以start为key从右往左遍历,只要出现了小于key的元素,即交换;而后从左往右遍历,大于key的元素交换
- 注意交换的过程中,要想明白,key是在不停的变换位置。
- 最后i,j应该相等,跳出最外层while循环
- 而后递归调用sort
以上是关于快速排序之java实现的主要内容,如果未能解决你的问题,请参考以下文章