快速排序 java实现

<span style="font-size:18px;">package com.sunny.sort;
/**
 * quick sort
 * @author panzha
 * 快速排序思想,选取一个数作为基准,一般选第一个,然后把数组分为2块,这个基准数字右边的都比这个数大,左边的都比这数小
 */
public class Demo001 {
	public static void main(String[] args) {
		//Integer s[] = new Integer[]{72,6,57,88,60,42,83,73,48,85};
		Double s[] = new Double[]{72.5,6.8,57.8,88.2,60.3,42.0,8.23,7.13,48.2,85.9};
		sort(s,0,s.length-1);
		print_data(s);
	}
	public static <T extends Comparable<T>>void sort(T s[],int h,int r){
		if(h<r){
			int i = quick_sort(s,h,r);
			sort(s,0,i-1);
			sort(s,i+1,r);
		}
		
	}
	//实现一次的快速排序
	public static <T extends Comparable<T>> int quick_sort(T s[],int h,int r){
		int i = h,j=r;
		
		T X = s[h];
		while(i<j){
			/*
			 * 从右边开始,查找第一个比X小的数,然后填坑
			 */
			
			while(i<j && s[j].compareTo(X)>=0){//加上i<j这个判断,不然产生了数组越界错误
				j--;
			}
			s[i] = s[j];//用s[j]把s[i]这个坑填了
			/*
			 * 从左边开始,查找第一个比X大的数
			 */
			while(i<j&&s[i].compareTo(X)<=0){
				i++;
			}
			s[j] = s[i];//用是s[i],把s[j]这个坑填了
		}
		s[i] = X;
		return i;
	}
	public static <T>void print_data(T s[]){
		for (T i : s) {
			System.out.print(i+" ");
		}
	}

}
</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值