算法_快速排序法(01)

java源代码实现:

//快速排序法
public class QuickSort {
	public void sort(int left,int right,int []arr){
		int l=left;
		int r=right;
		int temp=0;
		//取中间一个数
		int pivot=arr[left+(right-left)/2];
		
		//分割
		while(l<r){
			//默认左边是小的,右边大的-->即左边的所有数小于右边的所有数
			//找到左边大的数
			while(arr[l]<pivot){
				l++;
			}//当不循环的时候,必定是找到了那个大的数
			//找到右边小的数
			while(arr[r]>pivot){
				r--;
			}		
			if(l<=r){				
				//将左边大于pivot的那个数记录下来
				temp=arr[l];
				//把右边小于pivot的这个数和左边大于pivot的数交换
				arr[l]=arr[r];
				arr[r]=temp;
				l++;
				r--;
			}
		}//while循环结束后,arr这个数列被分割了[分割的原理是:依次找到左边大于pivot的数,依次放到右边小于pivot的数的地方,直到l>=r结束]
		if(l<right){
			sort(l,right,arr);
		}
		if(r>left){
			sort(left,r,arr);
		}
	}
	//显示
	public void show(int []arr){
		for(int i:arr){
			System.out.print(i+" ");
		}
	}
}
测试代码:

public static void main(String[] args) {
		final int COUNT=100000000;//一亿
		int []arr=new int[COUNT];//={1,6,0,-1,9,-2,12,-90};
		for(int i=0;i<COUNT;i++){
			arr[i]=(int)(Math.random()*COUNT);//Math.random产生一个0~1的小数,且速度比Random快,因为Random需要实例化;随机生成一亿个数
		}		
		
		long start=System.currentTimeMillis();		
		//创建一个快速排序法类
		QuickSort qs=new QuickSort();
		qs.sort(0,arr.length-1,arr);
//		qs.show(arr);//数据量有点大,不能输出
		
		long end=System.currentTimeMillis();
		System.out.println("排序使用的时间是:"+(end-start)/1000+"s");
	}
运行结果:

排序使用的时间是:22s

这是我目前为止学的最喜欢的一个排序方法,速度实在是太快了,只有快速排序法才敢测试一亿的数据量,冒泡,选择,插入等排序方法只能测试10万的数据量

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值