快速排序(基于递归)-------排序

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

快速排序(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 <stdio.h>
#include <stdlib.h>
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); 
	}
	
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值