快速排序java代码实现

说明:

    快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为基准值,所有比它小的元素放到左边,所有比它大的元素放到右边。经过这样一趟下来,该序列形成左右两个子序列,左边序列中的数据元素的值都比基准值小,右边序列中数据元素的值都比基准值大。接下来对左右两个子序列进行递归排序。

平均时间复杂度是T(n) = o(logn)

实现步骤:

    1、定义一个变量i从坐起第一个索引开始,找大于基准值的元素的索引,并用i记录;

    2、定义一个变量j,从右起第一个索引开始,找小于基准值的元素的索引,并用j来记录。

    3、如果i < j,交换i、j两个索引处的元素。

    重复执行以上1、2、3步骤,直到i>=j,可以判断j左边的元素都小于基准值,j右边的元素都大于基准值,最后将基准值与j索引处的元素交换即可。

代码:

public class Test {

	public static void main(String[] args) {
		int[] data = new int[]{ 5, 3, 6, 2, 1, 9, 4, 8, 7, 10};
		System.out.println("排序前的数组");
        print(data);
        System.out.println("开始排序");
        quickSort(data,0,data.length-1);
        System.out.println("排序后的数组");
        print(data);
	}

	/**
	 * 快速排序
	 * @param data	数组
	 * @param begin	开始下标
	 * @param end	结束下标
	 */
	private static void quickSort(int[] data, int begin, int end) {
		if(begin>=end)return;
		int point = data[begin];//保存起始值作为基准数
		int i = begin+1;
		int j = end;
		while(true){
			while(ibegin && data[j]>point){//从后往前:找到小于point的数的下标j
				j--;
			}
			if(i
输出结果:

排序前的数组
5	3	6	2	1	9	4	8	7	10	
开始排序
交换前:
5	3	4	2	1	9	6	8	7	10	
交换后:
1	3	4	2	5	9	6	8	7	10	
交换前:
1	3	4	2	5	9	6	8	7	10	
交换后:
1	3	4	2	5	9	6	8	7	10	
交换前:
1	3	2	4	5	9	6	8	7	10	
交换后:
1	2	3	4	5	9	6	8	7	10	
交换前:
1	2	3	4	5	9	6	8	7	10	
交换后:
1	2	3	4	5	7	6	8	9	10	
交换前:
1	2	3	4	5	7	6	8	9	10	
交换后:
1	2	3	4	5	6	7	8	9	10	
排序后的数组
1	2	3	4	5	6	7	8	9	10	




你可能感兴趣的:(快速排序java代码实现)