快速排序
1 递归:调用自己的方法 2 递归三原则:1.封装一个独立的方法 3 2.递归一定要有出口(结束条件) 4 3.符合一定的规律 5 6 斐波拉契 1 1 2 3 5 8 13 21 .......... 7 // int n1=1,n2=1; 8 // int sum=0; 9 // for(int i=2;i<8;i++) { 10 // sum=n1+n2; 11 // n1=n2; 12 // n2=sum; 13 // } 14 // System.out.println(sum); 15 // System.out.println(new Fbl().fb(8)); 16 递归做法: 17 // public int fb(int a) { 18 // if(a==1||a==2) { 19 // return 1; 20 // }else { 21 // return fb(a-1)+fb(a-2); 22 // } 23 // } 24 快速排序 25 26 27 陆军成 2019/7/31 19:21:46 28 29 public class QuickSort { 30 public static void quickSort(int[] arr, int left, int right) { 31 int pivot = 0; //基准点 32 if (left < right) { 33 pivot = partition(arr, left, right);//得到基准点 34 quickSort(arr, left, pivot - 1);//左子序列排序 35 quickSort(arr, pivot + 1, right);//右子序列排序 36 } 37 38 } 39 40 private static int partition(int[] arr, int left, int right) { 41 int key = arr[left];//选取第一个元素为基准元素 left指向数列的最左部,right指向数据的最右部 42 while(left < right) { 43 while(left < right && arr[right] >= key) {//如果arr[right]>=key,将right--,直到arr[right]遇到比key小的值为止 44 right--; 45 } 46 arr[left] = arr[right];//将arr[right]这个比key小的数放到左边去 47 while(left < right && arr[left] <= key) {//拿arr[left]与key进行比较,如果arr[left]<key则将left++ 48 left++; //然后再进行arr[left]与key的比较,直到遇到arr[left]>=key的值为止 49 } 50 arr[right] = arr[left];//将arr[left]这个比key大的数放到右边 51 } 52 arr[left] = key;//当left与right相等时退出while循环,key的值赋给当前left与right相等的位置, 53 //得到一个以key基准的数列,左子数列的元素都比key的值小,右子数列都比key的值大 54 return left;//返回新基准点的下标 55 } 56 }