快速排序算法(java实现)

7 篇文章 0 订阅

一.思想:

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据都要小,然后再用递归方法对着两部分分别进行快速排序,当每一部分不能再细分时完成排序.

 

二,解释

  1. 初始数组
初始数组
下标01234567
647928110

                                                                            l = 0, h = 7, k = 6

     2.一趟排序(对于每一趟排序都分为两部分,先是从右边找比自己小的,后是从左边找比自己大的)

一趟排序
下标01234567
147928610

                                                                            I = 0, h = 6, k = 6

一趟排序
下标01234567
146928710

                                                                           I = 2, h = 6, k = 6

       注意:只要l < h,排序还要进行下去,直到不满足循环条件为止,此时一趟排序完成,然后对左右两部分递归上述操作即可

 

三.代码

package 快速排序;

public class FastSort {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		int []a = {6, 4, 7, 9, 2, 8, 1, 10};
		
		for(int i = 0; i < a.length; i++){
			System.out.print(a[i] + " ");
		}
		
		System.out.println();
		
		sort(a, 0, a.length-1);
		
		for(int i = 0; i < a.length; i++){
			System.out.print(a[i] + " ");
		}

	}
	
	
	public static void sort(int []a, int low, int high){
		
		int l = low;
		
		int h = high;
		
		int k = a[low];
		
		
		while(l < h){
			
			while(l < h && a[h] >= k){
				h--;
			}
			
			if(l < h){
				
				int temp = a[h];
				
				a[h] = a[l];
				
				a[l] = temp;
				
				l++;
				
			}
			
			while(l < h && a[l] <= k){
				l++;
				
			}
			
			if(l < h){
				
				int temp = a[l];
				
				a[l] = a[h];
				
				a[h] = temp;
			
				h--;
			}
			
		}
		
		if(l-1 > low)
			sort(a, low, l-1);
		
		if(h+1 < high)
			sort(a, h+1, high);
		
	}

}









输出:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值