快速排序【排序算法】

目录

1.理解

2.动态可视化

3.静态示例

4.实现

5.是否是稳定的


1.理解

        快速排序是冒泡排序的变种,提高了效率。

2.动态可视化

https://visualgo.net/zh/sorting

3.静态示例

4.实现

public class QuickSort { 
    public static void quickSort(int[] arr,int startIndex,int endIndex){ 
    // 判断结束条件 
    if(startIndex >= endIndex) {return; } 
    // 获取基准点的位置 
    int partition = partition(arr, startIndex, endIndex); 
    // 根据基准点分成两部分进行递归 
    quickSort(arr,startIndex,partition-1); 
    quickSort(arr,partition+1,endIndex); 
} 

 */** 
    * 分制(双边循环法) 
    * @param arr 
    * @param startIndex 
    * @param endIndex 
    * @return 
    */ *
    private static int partition(int[] arr,int startIndex,int endIndex){ 
    //获取第一个元素的基准位置 
    int pivot = arr[startIndex]; 
    int left = startIndex; 
    int right = endIndex; 
    while (left != right) { 
    // 控制right 向左移动 
    while (left < right && arr[right] > pivot ){right--; } 
    //控制left 向右移动 
    while (left < right && arr[left] <= pivot ){ left++; } 
    // 如果出现左右指针需要交换的数据,就进行交换 
    if (left < right){ 
        int temp = arr[left]; ​ 
        arr[left] = arr[right]; 
        arr[right] = temp; ​ 
    } 
    } 
    // 到这里证明这除了选出接单位置后,其他的部分已经按照左右指针分出 大于和小于基准点的部分 
    arr[startIndex] = arr[left]; 
    arr[left] = pivot; 
    return left; 
} 
public static void main(String[] args) { 
    int[] arr = new int[] {4,7,3,5,6,2,8,1}; ​ 
    quickSort(arr, 0, arr.length-1); ​ 
    System.out.println(Arrays.toString(arr)); 
    } 
}

5.是否是稳定的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值