快速排序

快速排序讲解

排序算法的最基本要义就是选取某个固定值当标准,大于等于它的放在右边,小于等于它的放在它的左边,算法解析,以下方的数组为例,初始的时候,数组0位空缺,用来放置标准值,初始的时候标准值等于啊a[1],end=10,start=1,i=start,j=end从右方开始找起,一直找到一个小于标准值50的,所以j=9,然后a[i]=a[j],(第二行)换过之后,从左边开始找起,一直找到一个大于50的值,一直找到大于50的,所以i=2,然后执行a[j]=a[i](第三行),再继续循环,一直等到i>=j的时候,便跳出循环,这时就是最后一步,将标准值与a[j]互换,形成一边小于标准值(1-3),一边大于等于标准值(4-10),在利用递归,将两个数组继续执行上诉过程,这样一遍遍的循环下去,便会将整个数组排序完成。


0

1

2

3

4

5

6

7

8

9

10

50

50

62

34

85

42

71

52

84

16

49

50

16

62

34

85

42

71

52

84

16

49

50

16

62

34

85

42

71

52

84

62

49

50

16

42

34

85

42

71

52

84

62

49

50

16

42

34

85

85

71

52

84

62

49

50

16

42

34

50

85

71

52

84

62

49

</pre><pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp">#include<stdio.h>
#include<stdlib.h>


int main()
{
	void Qsort(int a[],int i,int j);
	void print(int a[],int n);
	int a[]={0,50,62,34,85,42,71,52,84,16,49};
	print(a,10);
	printf("\n");
	Qsort(a,1,10);
	print(a,10);
	return 0;
}

void print(int a[],int n)
{
	int i;
	for(i=1;i<=n;i++)
	{
		printf("%d  ",a[i]);
	}
}

void  Qsort(int a[],int start,int end)
{
	int i=start,j=end;
	a[0]=a[start];
	while(i<j)
	{
		while(i<j&&a[j]>a[0])
		{
			j--;
		}
		if(i<j)
		{
			a[i]=a[j];
			i++;
		}
		while(i<j&&a[i]<=a[0])
		{
			i++;
		}
		if(i<j)
		{
			a[j]=a[i];
			j--;
		}
	}
	a[j]=a[0];
	if(start<j)
	{
		Qsort(a,start,j-1);
	}
	if(j<end)
	{
		Qsort(a,j+1,end);
	}

}


 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值