每日一提:三分钟理解的快速排序

简单原理

  1. 快速排序是给定一个基准值然后进行比较小于他和大于他的数,
  2. 小于他的数放左边,大于他的放右边
  3. 然后再以他的左边为整体,再选出一个基准值,然后重复①②直到左边为一个数就不用排序了,右边也如此
  4. 为了不纠结基准值,默认就选择第一个,
  5. 两个指针作为辅助,一个left,一个right,最左和最右,交替比较(如果left小就移动指针继续判断left,right大就移动right)
  6. 但是如果left大于temp就arr[right]=arr[left],然后right减一位,判断right指针方便等会去覆盖left的值,交替比较

在这里插入图片描述

代码实现:

QuickSort.java
public class QuickSort {
 public int[] qsort(int arr[],int start,int end) {        
     int pivot = arr[start];        
     int i = start;        
     int j = end;        
     while (i<j) {            
         while ((i<j)&&(arr[j]>pivot)) {                
             j--;            
         }            
         while ((i<j)&&(arr[i]<pivot)) {                
             i++;            
         }            
         if ((arr[i]==arr[j])&&(i<j)) {                
             i++;            
         } else {                
             int temp = arr[i];                
             arr[i] = arr[j];                
             arr[j] = temp;            
         }        
     }        
     if (i-1>start) arr=qsort(arr,start,i-1);        
     if (j+1<end) arr=qsort(arr,j+1,end);        
     return (arr);    
 }    
}
Test.java
public class Test {
 public static void main(String[] args) {
  // TODO 自动生成的方法存根
            QuickSort quick=new QuickSort();
      int arr[] = new int[]{3,3,3,7,9,122344,4656,34,34,4656,5,6,7,8,9,343,57765,23,12321};        
      int len = arr.length-1;        
      arr=quick.qsort(arr,0,len);        
      for (int i:arr) {            
          System.out.print(i+"\t");    
      }      
 }
}
//输出结果3 3 3 5 6 7 7 8 9 9 23 34 34 343 4656 4656 12321 57765 122344 

进大厂必熟背

在这里插入图片描述

上图可知快速排序并不是最优排序,但能用于有基准值排序的场景,不稳定,
O(1), O(n), O(logn), O(nlogn) 的区别-》https://blog.csdn.net/ted_cs/article/details/82881831

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值