快速排序总结

快速排序原理与实现

快速排序

1.前言

快排基于的是冒泡排序改进的一种算法。冒泡排序的时间复杂度为O(n2),而快排的时间复杂度为O(nlgn),有了极大的改进。

2. 原理

将原来的一整个序列切割成两半,找到一个中间值,不断在左边的序列里寻找比标记值更大的元素,在右边的序列中寻找比标记元素更小的元素。即将大的元素向后移,小的元素向前移。

3.代码&&比较

3.1 冒泡排序

for (int i = 1; i <= n - 1; i++)//进行n-1次比较 
{
	int j = 1;
	while(j<=n-i)
	{
		int t;
		if(a[j]>a[j+1])//前面元素比后面元素值大就进行互换
		{
			a[j + 1] = t;
			a[j + 1] = a[j];
			a[j] = t;
		}
	}
}

3.2快速排序

int  quick_sort(int *number,int low,int high)
{
	number[0] = number[low];
	int key = number[low];
	while(low<high)
	{
		while (low < high&&number[high] >= key)
			high--;
		number[low] = number[high];//将大值,从高处向地处搬移
		while (low < high&&number[low]<= key)
			low++;
		number[high] = number[low];//将小值,从低处向高处搬移
	}
	number[low] = number[0];
}

void work(int *number,int low,int high)
{
	if(low<high)
	{
		int mid = quick_sort(number, low, high);//找到标记值的位置
		//进行完一次快速排序后,标记值位置左边为小于它的全部元素
		//右边位置为大于它的全部元素
		work(number, low, mid - 1);//对左边位置进行快排
		work(number, mid + 1, high);//对右边位置进行快排
	}
}

3.快排时间复杂度分析

第一次进行一次操作,序列分为两个队列,第二次进行两次操作,序列分为四个队列,所以总共是lgn次操作,由于每一次操作,我们都是相当于,对序列中所有元素的值进行比较,一共是n次,所以总共就是nlgn次操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值