部门没人了,公司动作好快。。。算了,不想了!还是学知识吧,只有它不会让自己失望。
继续我的算法学习,快速排序是应用很广的算法,看了一早上才看懂些,感觉比冒泡之类的难理解,可能主要是递归那块自己不是很理解。
1 public class QuickSort { 2 public static void main(String[] args) { 3 //int a [] = {49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23}; 4 int a [] = {34,15,35,36,25,53,51} ;//初始数组 5 //原理:选一个数,开头或结尾的数字,然后和剩下的数依次比较, 6 // 比较一轮之后,比其大的放一边,比其小的放一边,然后依次对两边分别进行递归。 7 QuickSort quickSort=new QuickSort(); 8 quickSort.isEmptyArray(a); 9 for (int i=0;i<a.length;i++){ 10 System.out.print(a[i]+","); 11 } 12 13 } 14 //拿到基准数字的位置 15 public int getMiddleNum(int[] a,int low,int high){ 16 int basic=a[low];//数组的第一个作为比较数字 17 while (low<high){ //如果low>=high时,说明已经是最后一轮了 18 while (low<high && a[high]>=basic){ 19 high--; 20 } 21 a[low]=a[high];//比基准小的移动到底端 22 while (low<high && a[low]<= basic){ 23 low++; 24 } 25 a[high]=a[low];//比基准大的移动到高端 26 } 27 a[low]=basic;//基准记录到尾部 28 return low; //返回基准的位置 29 } 30 //排序 31 public void sort(int[] a ,int low,int high){ 32 if(low<high){ 33 int middle=getMiddleNum(a,low,high); //得到基准数字的位置(关键) 34 sort(a,low,middle-1); //对小于基准数字的进行递归 35 sort(a,middle+1,high); //对大于基准数字的进行递归 36 } 37 } 38 //判断数字是否为为空 39 public void isEmptyArray(int[] a){ 40 if (a.length>0){ 41 sort(a,0,a.length-1); 42 } 43 } 44 }