[传统算法06]快速排序

快速排序算法:
算法原理:
1.首先有个数组,先选出一个比较元素,然后两个索引,一个索引从头开始检索,另外一个从尾开始检索。
2.从头开始检索的索引要跟选出来的元素进行比较,如果比较小,继续检索下一个元素,如果比较大,停住,取出元素a ;
3.从尾开始检索的索引也要跟选出来的元素进行比较,如果比较大,也是继续检索下一个元素,如果比较小,停住,取出元素b ,元素 a 和 b 调换位置。
4.重复 1~3的步骤,直到 两个索引指向同一个元素,然后将比较元素的位置与两个索引所指的元素互换位置,这样的结果就会形成 比较元素左边的肯定比比较元素小,右边的肯定比比较元素要大。
5.每个元素重复1到4的步骤,完成排序。

例如:有个数组: {6,5,4,3,2,1,0,55,66,99,0},要求从小到大排序
比较元素:6
完成1~4 步骤后的排序结果为:
[0, 5, 4, 3, 2, 1, 0, 6, 66, 99, 55]
比较元素:0
[0, 5, 4, 3, 2, 1, 0, 6, 66, 99, 55]
比较元素:5

上代码:

public static void main(String[] args) {
    	int[] arrs={6,5,4,3,2,1,0,55,66,99,0} ;
    	sort(arrs,0,arrs.length-1) ;
    	for(int i=0 ; i<arrs.length ; i++){
    		System.out.println(arrs[i]) ;
    	}
    }
    
    private static void sort(int[] arrs,int left ,int right){
    	if(left > right){
    		return ;
    	}
    	int i=left ;
    	int j=right ;
    	int temp = arrs[left] ;
    	while(i!=j){
    		//必须从后开始
    		while(j>i&& arrs[j] >= temp){
    			j-- ;
    		}
    		while(j>i && arrs[i] <=temp){
    			i++ ;
    		}
    		if(j!=i){
    			arrs[i] ^= arrs[j] ;
    			arrs[j] ^=arrs[i] ;
    			arrs[i] ^=arrs[j] ;
    		}
    	}
    	
    	//将对比数字与当前对比索引值互换位置
    	arrs[left] = arrs[i] ;
    	arrs[i] = temp ;
    	
    	sort(arrs,left,i-1) ;
    	sort(arrs,i+1,right);
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值