快速排序

快速排序的通俗理解:


通俗理解 快速排序:

1. 快速排序 也需要  进行多趟排序 才能完成

2.每一趟的使命是 给我一个以基准值key为分界,一个所有值都比基准值小的数组 和一个所有值都比基准值大的数组,

3.那这个基准值是谁呢,按理说数组中任意一个数都可以充当这个基准值,但是我们一般都选数组中的第一个元素,情怀问题,哈哈开玩笑,比起来多有调理,多方便

4.那每一趟是怎么完成任务的呢?

   (1)从最左边开始 有个游标   i,从最右边开始 设一个游标 j

   (2)然后依次交替,j处的值 与 key值比较,比key小的交换位置,然后i处的值再与key比较,比key大的交换位置,一次左右交替

   (3).依次左右交替,什么时候,一趟就结束了呢,知道i,j游动到一起,即i=j时,第一趟循环结束

   (4).然后以基准值key为分解线,两个数组 再递归调用上面排序的方法。

这样执行多趟快速排序就完成了。。。


排序过程如下图所示:

实现代码如下所示:




public class FastSort {
	public static void main(String[] args) {
		int[] a = {2,5,1,4,94,36,2,2,2,4,4,6,142,2,4,56,32} ;
		printArrayBef(a) ;
		int start = 0;
		int end = a.length -1 ;
		fastSort(a, start,end);
		printArrayAft(a) ;
	}

	private static void printArrayAft(int[] a) {
		System.out.println("数组排序之后的次序为:");		
		for(int i = 0; i
    
    
     
     = end){
			return ;
		}
		//排序终止的标志是前面和后面的游标重合
		while(low != high){
			if(flag){
				if(a[high]< key){
					swap(a, high, low);
					flag = false ;

				}
				else{
					high-- ;
				}
			}else{
				if(a[low]>key){
					swap(a,high,low) ;
					flag = true ;
				}
				else{
					low++ ;
				}
			}

			

		}

		//排一次序
		printSorting(a) ;
		fastSort(a,high+1,end) ;
		fastSort(a, start, low-1);
		



	}

	private static void printSorting(int[] a) {
		System.out.println("排序中的次序");	
		for(int i = 0 ;i
     
     
    
    


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值