快速排序基础分析

快速排序的基本思想:

        首先在数组中选取一个用于比较的基准值,将待排序的记录分为两部分,左侧记录均是小于或等于基准值的,右侧记录均是大于或等于基准值的,然后分别对两部分重复上述操作。

基准值:

        1.选取第一个元素

        2.选取第一个元素、最后一个元素、中间元素中居中的元素作为基准值,并调到第一个元素               的位置

时间复杂度:快速排序的执行时间取决于递归的深度:

        最坏情况:O(n^2) 元素正序或逆序,所有除了基准值以外的所有记录分到基准值的一边。

        最好情况:O(nlog2^n) 每次划分,左侧子序列和右侧子序列的元素长度相同.

        平均情况:O(nlog2^n)

        递归需要的容量(栈来存放):最大容量与递归调用的深度一致,最好情况下为 O(log2^n)最坏情况下要进行 n-1 次递归调用,所以栈的深度为 O(n)平均情况下,栈的深度为 O(log2^n) ,快速排序是不稳定的排序方法。

#include<iostream> 
using namespace std;
int parti(int first, int last, int data[])
{
	int i = first;
	int j = last;
	int temp;
	while (i < j)
	{
		while (i < j && data[i] <= data[j])
		{
			--j;
		}
		if (i < j)
		{
			temp = data[i];
			data[i] = data[j];
			data[j] = temp;
			++i;
		}
		while (i < j && data[i] <= data[j])  
		{
			++i;
		}
		if (i < j)
		{
			temp = data[i];
			data[i] = data[j];
			data[j] = temp;
			--j;
		}
	}
	cout << "i:" << i << endl;
	return i;
}
void quick_sort(int first, int last,int data[])
{
	if (first >= last)
	{
		return;
	}
	else
	{
		int mid = parti(first, last,data);
		quick_sort(first, mid - 1,data);
		quick_sort(mid + 1, last,data);
	}
}
int main()
{
	int arr[] = {23,13,35,6,19,50,28};
	int size = sizeof(arr) / sizeof(int);
	quick_sort(0, size - 1, arr);
	for (int i = 0; i < size; ++i)
	{
		cout << arr[i] << " ";
	}
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值