快速排序

递归思想:
1.将数组划分成两个子数组
2.两个子数组 递归调用快排函数继续向下划分两个子数组。。。。

划分子数组的原则:
选取一个基准值A(一般选数组的第一个或最后一个元素),比A小的放左边,比A大的放右边。

1
//1.划分数组方法
2
//arr:数组,start:数组起始索引,end:数组结束索引
3
//base:基准值(默认为数组第一一个值)
4
public void partition(int[] arr,int start,int end){
5
    if (start < end) {
6
        int base = arr[start];//获取基准值
7
        int i = start;//左指针
8
        int j = end + 1;//右指针
9
        while (true) {
10
            while (i < end && data[++i] <= base);//左指针往右不断地移,遇到比base大的就跳出循环
11
            while (j > start && data[--j] >= base);//右指针往左不断地移,遇到比base小的就跳出循环
12
                if (i < j) {
13
                    swap(arr, i, j);//跳出循环后还没结束,交换左右指针的值
14
                } else {
15
                    break;//结束了,直接跳出大循环
16
                }
17
        }
18
        swap(arr, start, j);//交换基准值(start索引)和j指针的元素位置(此时j所指的数变成类比base小)
19
        partition(arr, start, j - 1);//base值左边进行递归划分数组
20
        partition(arr, j + 1, end);//base值右边进行递归划分数组
21
    }
22
}
23
24
25
//2.排序方法
26
public void quickSort(int[] arr){
27
    partition(arr,0,arr.length-1);
28
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值