Java实现快速排序

本案例需要完成的任务定义如下:实现快速排序算法。

 

快速排序的算法如下:

1)选定一个值作为“枢轴”,一般选择第一个元素(理想情况下应选择中位值);

2)基于枢轴进行排序,将小于枢轴的数据排在左边,大于枢轴的数据排在右边;

3)一轮排序之后,枢轴即在最终的位置;

4)采用递归,分别对左右两部分进行快速排序,直到每个部分仅有一个元素;

5)排序完成。

 

快速排序的关键点在于:每次快排仅确定“枢轴”位置。

package quickSortTest;

import java.util.Random;

public class QuickSortTest {
	//采用递归进行快速排序
	public static void quickSort(int arr[], int start, int end){
		//注意继续排序的前提是start<end
		if(start < end){
			int index = partition(arr, start, end);
			quickSort(arr, start, index-1);
			quickSort(arr, index+1, end);
		}	
	}
	
	//将数据集分为两部分,返回枢轴所在位置
	public static int partition(int arr[], int start, int end){
	//枢轴定义为开始元素
		int pivot = arr[start];
		int left = start;
		int right = end;
		while(left < right){
			//如果右边的值大于等于pivot,right指示符左移
			//如果右边的值小于pivot,则将其换到左边
			//注意:arr[start]已经赋值给pivot,因此arr[left] = arr[right]不会冲刷掉数据
			while(left<right && arr[right]>=pivot) right--;
			arr[left] = arr[right];
			//如果左边的值小于等于pivot,left指示符右移
			//如果左边的值大于pivot,则将其换到右边
			while(left<right && arr[left]<=pivot) left++;
			arr[right] = arr[left];
		}
		//枢轴归位
		arr[left] = pivot;
		return left;
	}

	public static void main(String[] args) {
			// TODO Auto-generated method stub
		int[] arr = new int[100];
		Random rand =new Random();
		int length = 100;
		for(int i=0;i<length;i++){
			arr[i] = rand.nextInt(100);
			System.out.print(arr[i]+",");
		}
		quickSort(arr,0,length-1);
		System.out.println();
		System.out.println("===========after quicksort==========");
		for(int i=0;i<length;i++){
			System.out.print(arr[i]+",");
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值