快速排序(图解)看完你还不懂?

package 排序算法;

import java.util.Arrays;

public class QuickSort {

	public static void main(String[] args) {
		int[] arr = new int[] {3,4,7,6,2,7,2,8};
		quickSort(arr, 0, arr.length-1);
		System.out.println(Arrays.toString(arr));
	}
	
	public static void quickSort(int[] arr ,int start, int end) {
		//寻找一个数作为标准数
		int stard = arr[start];
		//记录需要排序的下标
		int low = start;
		int high = end;
		//循环找比标准数大的数和比标准数小的数
		while(low<high) {
			
			//右边的数比标准数大
			while(low<high&&stard<=arr[high]) {
				high--;
			}
			//使用右边的数字替换左边的数字
			arr[low] = arr[high];
			//如果左边的数字比标准数小
			while(low<high && arr[low]<=stard) {
				low++;
			}
			arr[high] = arr[low];
			
			//把标准数赋值给最低所在的位置
			arr[low] = stard;
			
			//处理所有的小的数字
			quickSort(arr, start, low);
			//处理所有的大的数字
			quickSort(arr, low+1, end);
		}
	}
	
}

快速排序的原理:

把第一个数作为标准数stard,小于标准数的数字放在左边,大于标准数的数字放在右边。

(相当于把原数组分割成两段,第一段是0----标准数,第二段是标准数+1---arr.length-1)

然后对两段数组进行一次递归调用,完成排序


如何按照标准数,分为左右两段?

可以理解为挖坑法

原数组
3 4 7 6 2 7 2 8
挖去标准数
  4 7 6 2 7 2 8
从end开始判断,如果小于标准数,则把该数填入左边坑内
2 4 7 6 2 7   8
从左边第二个数开始判断是否大于标准数,若大于则填入坑内
2   7 6 2 7 4 8

然后又从右边开始判断,以此类推,最后得出

2 2   6 7 7 4 8

把标准数填入坑内

2 2 3 6 7 7 4 8

然后执行两次递归,解决问题。

扫描二维码关注公众号,回复: 11647190 查看本文章

猜你喜欢

转载自blog.csdn.net/xmt1369758466/article/details/86473331