首页 > 编程语言 > 详细

算法-排序-快速排序

时间:2021-03-04 19:07:39      阅读:26      评论:0      收藏:0      [点我收藏+]
package com.test.sort;

public class KuaiSuSort {
	public void printSort(int[] arr) {
		StringBuilder sbu = new StringBuilder();
		sbu.append("[");
		for (int i = 0; i < arr.length; i++) {
			if(i == arr.length -1) {
				sbu.append(arr[i] + "]");
			}else {
				sbu.append(arr[i] + ",");
			}
		}
		System.out.println(sbu.toString());
	}
	/**
	 * 标记一个数字,然后将所有数分为两部分,一部分比他大的放他右边,一部分比他小的放左边
	 * 再利用递归不断按上面排序
	 * @param arr
	 * @param low
	 * @param high
	 */
	public void kuaiSuSort(int[] arr,int low,int high) {
		//最小循环数
		int start = low;
		//最大循环数
		int end = high;
		//标记数
		int key = arr[low];
		//整体大循环 将所有数 分为两部分 比标记数 大的放在标记数右边 ,比标记数小的放在标记数左边 
		while(start < end) {
			//从后开始,从后往前,将小的放在标记数key前面,如果比key大就跳过 end--
			while(start < end && arr[end] >= key) {
				end --;
			}
			//将小于key的放前面
			if(arr[end] <= key) {
				int temp = arr[end];
				arr[end] = arr[start];
				arr[start] = temp;
				new KuaiSuSort().printSort(arr);
			}
			//从前开始,从前往后,将大的放在标记数key后面,如果比key小就跳过 end--
			while(start < end && arr[start] <= key) {
				start++;
			}
			//将大于key的放后面
			if(arr[start] >= key) {
				int temp = arr[start];
				arr[start] = arr[end];
				arr[end] = temp;
				new KuaiSuSort().printSort(arr);
			}
			//递归调用
			if(low < start) {
				kuaiSuSort(arr , low,start-1);
				new KuaiSuSort().printSort(arr);
			}
			if(end < high) {
				kuaiSuSort(arr , end+1,high);
				new KuaiSuSort().printSort(arr);
			}
		}
	}
	public static void main(String[] args) {
		int []arr={12,20,5,16,15,1,2,100,30,45,23,9};
        int low=0;
        int high=arr.length-1;
        System.out.println("排序前");
        new KuaiSuSort().printSort(arr);
        System.out.println("排序后");
        new KuaiSuSort().kuaiSuSort(arr, low, high);
        new KuaiSuSort().printSort(arr);
	}
}


打印结果:
技术分享图片

算法-排序-快速排序

原文:https://www.cnblogs.com/lbj-bingo/p/14481273.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!