快排算法

一、快排思路

对于给定的数组,从中选一个元素为比较对象,一般选最左或最右的元素,选左边为升序排,选右边反之。

数组array[]:

 最左边:target = 5

数组下标:i = 0, j = 9

步骤:

从右边遍历数组,把array[ j ]比5小的放在5的左边, j--;

交换位置后i = 0,j = 7:

②从左边遍历数组把array[ i ]比5大的放在5的右边, i++;

交换位置后i = 5,j = 7:


③回到①②步骤循环执行:


循环执行后,比5小的都放在了5的左边,比5大的都放在了5的右边;

④此时5左边和右边部分还是乱序的,这就需要做递归操作,把0 2 3 1 4和 7 8 6 9 部分继续执行述排序步骤。

递归执行后:


二、快速排序java实现

代码:

package com.ansel.personal.util;

/**
 * Created by ansel on 2017/12/28.
 */
public class SortUtil{
	
	public static void quickSort(int[] array, int start, int end) {
		int i = start, j = end;
		int target = array[start];
		while (i < j) {
			while (i < j && target <= array[j])
				j--;
			if (i < j) {
				int temp = array[j];
				array[j] = array[i];
				array[i] = temp;
			}
			while (i < j && array[i] <= target)
				i++;
			if (i < j) {
				int temp = array[j];
				array[j] = array[i];
				array[i] = temp;
			}
		}
		if (i - 1 > start){
			quickSort(array, start, i - 1);
		}
		
		if (j + 1 < end){
			quickSort(array,j + 1, end);
		}
	}
	public static void main(String[] args) {
		int [] array = {5,2,3,1,6,4,7,8,0,9};
		SortUtil.quickSort(array,0,array.length - 1);
		for (int i = 0; i < array.length;i++)
			System.out.print(array[i] + " ");
	}
}
执行结果:

Copyright © 2018 Ansel. All rights reserved. 

猜你喜欢

转载自blog.csdn.net/qq_29039705/article/details/78922493
今日推荐