首页 > 编程语言 > 详细

快速排序

时间:2019-08-18 22:49:51      阅读:98      评论:0      收藏:0      [点我收藏+]
 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 }

 

快速排序

原文:https://www.cnblogs.com/had1314/p/11373827.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!