排序——快速排序(Quick sort)

本文详细介绍了快速排序算法的工作原理,包括选取基准点、分区操作及递归排序过程。快速排序是一种高效的排序方法,其平均时间复杂度为O(nlogn),但最坏情况下可达O(n^2)。

快速排序:是冒泡排序的改进型。首先在数组中选取一个基准点,设置进行快排的数组段low~high。对于每一次快排,设置前后两个遍历指针start和end,分别初始化为排序数组的首位和末位。假设刚开始设置的基准点为数组中的第一个元素,先从后面遍历,end一次减小,如果找到一个比基准点小的数,就交换两者的位置。然后从前面遍历,start依次增大,如果找到一个比基准点大的值就交换两者的位置,直到前后遍历的位置相遇,即start=end,结束本轮排序。然后记录基准点当前所在位置,将原数组分成两部分分别进行递归,实现排序。

快速排序的最优时间复杂度为O(nlogn),对应的情况是每一次取到的元素都平分数组中的元素。快速排序的最差的时间复杂度为O(n^2),对应的情况是每次取到的元素是数组中的最大值或最小值。快速排序的平均时间复杂度为O(nlogn)。

快速排序的最优空间复杂度O(logn),对应于每一次都平分数组的情况,快速排序的最差空间复杂度为O(n),对应于退化为冒泡排序的情况。

代码实现:

class test
{
	public static void main(String[] args)
	{
		int[] arr = {6,3,7,4,1};
		quickSort(arr, 0, arr.length - 1);
		for(int i = 0; i < arr.length; i++)
		{
			System.out.println(arr[i]);
		}
	}

	public static void quickSort(int[] arr, int low, int high)
	{
		int start = low;
		int end = high;
		int point = arr[low];
		
		while(start < end)
		{
			while(start < end && arr[end] >= point)
			{
				end--;
			}
			int temp = arr[end];
			arr[end] = arr[start];
			arr[start] = temp;
			
			while(start < end && arr[start] <= point)
			{
				start++;
			}
			int temp1 = arr[end];
			arr[end] = arr[start];
			arr[start] = temp1;
		}
		if(start > low) quickSort(arr, low, start - 1);
		if(end < high) quickSort(arr, end + 1, high);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值