编程语言
首页 > 编程语言> > 基本算法——快速排序

基本算法——快速排序

作者:互联网

目标:掌握快排和java中的快排函数

目录

1. 快排

快排的核心思想:

快速排序

// 参数解释:
// 1. int[] arr 需要排序的数组
// 2. int l  排序的左端点
// 3. int r	 排序的右端点
// 举例: 你要排序一个 int[] arr = {1,5,3,2,6} 数组内全部要排序,l=0,r=arr.length-1
public static void quickSort(int[] arr, int l, int r)
{
    //递归结束 条件
    if(l>=r) return;
    
    //1. 确定分界点
    int p = arr[l]; //我们取左端点
    //确定边界 +1-1是应为我们使用的do-while,开始前就会i++和j--
    int i = l-1;
    int j = r+1;
    
    //2. 调整区间
    while(i < j){
        do{
            i++;
        }while(arr[i] < p); //记得分号;
        
        do{
            j--;
        }while(arr[j] > p); 
        
        //找到两个不符合定义的点,即左边找到一个比分界点大的,右边找到一个比分界点小的
        //交换
        if(i < j){ //别忘了,很关键,两个指针还没有重合或穿过
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }          
    }
    
    //3. 递归处理
    quickSort(arr, l, j);
    quickSort(arr, j+1, r);
    //此处为了边界不出问题,我们边界点一开始取q[l],那么递归的时候就l~j 和 j+1~r
    //这样就不会出现边界问题
}

2. Arrays.sort

事实上、在java的api中就有写好的快排,手写快排主要运用在面试中

在这里插入图片描述

标签:分界点,arr,递归,int,快排,算法,排序,快速
来源: https://blog.csdn.net/qq_39285571/article/details/106289844