快速排序

import java.util.Arrays;
/**
 * 
 * 快速排序通过一个切分元素将数组分为两个子数组,左子数组小于等于切分元素,右子数组大于等于切分元素.
 * 将这两个子数组排序也就将整个数组排序了。
 * 
 * 最好时间O(nlogn);平均时间O(nlogn); 最坏时间O(n^2); 辅助存储O(logn)   不稳定;
 * 
 */

public class QuickSort {

	public static void main(String[] args) {
		int[] arr = new int[]{3,4,6,7,2,7,28,0};
		System.out.println(Arrays.toString(arr));
		quickSort(arr,0,arr.length-1);
		System.out.println(Arrays.toString(arr));
	}
	public static void quickSort(int[] arr, int start, int end) {
		if (start>=end) {
			return;
		}
		// 把数组中的第零个数字作为标准数
		int index = arr[start];
		// 记录要排序的下标
		int low = start;
		int high = end;
		//循环找比标准数大的数和比标准数小的数
		while (low<high) {
			//右边的数字比标准数大
			while ( low<high && arr[high] >=index ) {
				high--;
			}
			//使用右边的数字替换左边的数
			arr[low] = arr[high];
			
			//如果左边的数字比标准数小
			while(low<high && arr[low] <= index) {
				low++;
			}
			arr[high]=arr[low];
		}
		//把标准数据赋给低所在的位置的元素(此时 low=high)
		arr[low]=index;
		//处理所有的小的数字
		quickSort(arr,start,low-1);
		//处理所有的大的数字
		quickSort(arr,low+1,end);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值