排序算法之快速排序

看到这个名字是不是第一感觉就是这个排序算法好,可以快速排序。到底是不是这样呢?我们先来看一下原理吧!
可以证明,快速排序的平均时间复杂度也是O(nlog2n)。因此,该排序方法被认为是目前最好的一种内部排序方法。


在这里插入图片描述
图片来源于百度百科;
快速排序是利用递归实现的分段排序。当数据序列长度为1时结束这一段的排序。如上图所示。
代码来源于百度

public static int[] qsort(int arr[],int start,int end) { 
		//获取第一个数据       
	    int pivot = arr[start]; 
	    //i指向数组开始       
	    int i = start;
	    //j指向数组末尾        
	    int j = end;
	    //当i<j时,也就是说当i==j时不会执行下面的排序,最短的情况就是i==j        
	    while (i<j) {
	    	//当i<j并且arr[j]大于pivot时,j--,因为要把大数放在右边,把小数放在左边,所以只需要j--            
	        while ((i<j)&&(arr[j]>pivot)) {                
	            j--;            
	        }         
	        //同样,这里只需要i++   
	        while ((i<j)&&(arr[i]<pivot)) {                
	            i++;            
	        }    
	        //当然也有一种情况就是i<j,但是arr[i]==arr[j],这个时候就不需要再交换arr[i]和arr[j],当然,你可以令i++,也可以令j--;        
	        if ((arr[i]==arr[j])&&(i<j)) {                
	            i++;            
	        } else { 
	        	//排除上面所有情况,下面就是开始排序了,此时在i的位置的数等着和在j的位置的数交换。               所以,交换一下这两个位置的数就好了
	            int temp = arr[i];                
	            arr[i] = arr[j];                
	            arr[j] = temp;            
	        }        
	    } 
	    //比如i=2,i-1=1,1>0,也就是说,至少两个数要排一下序。递归排序。递归对一个数组的一部分进行排序
	           
	    if (i-1>start) arr=qsort(arr,start,i-1);       
	    //同样,这个和上面思路一样 
	    if (j+1<end) arr=qsort(arr,j+1,end); 
	           
	    return (arr);    
	}    
	 
	public static void main(String[] args) {        
	    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=qsort(arr,0,len);        
	    for (int i:arr) {            
	        System.out.print(i+"\t");        
	    }    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值