快速排序

快速排序,第1张

什么是快速排序,让我们看看百度百科的介绍:

快速排序(Quicksort),计算机科学词汇,适用领域Pascal,c++等语言,是对冒泡排序算法的一种改进。

快速排序的步骤:

排序演示

假设一开始序列{xi}是:5,3,7,6,4,1,0,2,9,10,8。

此时,ref=5,i=1,j=11,从后往前找,第一个比5小的数是x8=2,因此序列为:2,3,7,6,4,1,0,5,9,10,8。

此时i=1,j=8,从前往后找,第一个比5大的数是x3=7,因此序列为:2,3,5,6,4,1,0,7,9,10,8。

此时,i=3,j=8,从第8位往前找,第一个比5小的数是x7=0,因此:2,3,0,6,4,1,5,7,9,10,8。

此时,i=3,j=7,从第3位往后找,第一个比5大的数是x4=6,因此:2,3,0,5,4,1,6,7,9,10,8。

此时,i=4,j=7,从第7位往前找,第一个比5小的数是x6=1,因此:2,3,0,1,4,5,6,7,9,10,8。

此时,i=4,j=6,从第4位往后找,直到第6位才有比5大的数,这时,i=j=6,ref成为一条分界线,它之前的数都比它小,之后的数都比它大,对于前后两部分数,可以采用同样的方法来排序。

代码实现:

#include 
#include 
void quicksort(int [],int ,int );

int main(void) 
{
	int arr[11] ={5,3,7,6,4,1,0,2,9,10,8};
	quicksort(arr,0,10);
	int i;
	for(i = 0 ;i < 11;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

void quicksort(int arr[],int left,int right)
{
	int qian = left ,hou = right;
	if(qian > hou)
	{
		return;
	}
	else
	{
		while(qian < hou)
		{
			while(qian < hou &&arr[hou] >= arr[left])
			{
				hou--;
			}
			while(qian < hou &&arr[qian] <= arr[left])
			{
				qian++;
			}
			//相遇 
			if(qian == hou)
			{
				break;
			}
			//未相遇
			int temp = arr[qian];
			arr[qian] = arr[hou];
			arr[hou] = temp;
		}
		if(qian != left)
		{
			int tmp = arr[qian];
			arr[qian] = arr[left];
			arr[left] = tmp;
		}
		
		//递归
		 quicksort(arr,left,qian - 1);
		 quicksort(arr,hou+1,right); 
	}
	
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/798579.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存