快速排序

快速排序

此之前都是用sort(stl大法好)

一直知道原理,但是只写过一次发现手写的没stl里的快(里面加入了各种深度优化)

快排原理:先定一个目标数,然后把比它小的放在它左边,比它大的放在它右边,进行分治。最后每个分块都只有一个数那么排序OK了。

代码:

#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#define MAX 16
int q[20];
void Quicksort(int l,int r)
{
	if(l>=r)
	return;
	int start=l;
	int end=r;
	int k=q[l];
	while(start<end)
	{
		while(q[end]>=k&&start<end)   //填入比它小的 
		end--;
		q[start]=q[end];
		while(q[start]<=k&&start<end)   //填入比它大的 
		start++;
		q[end]=q[start];
	}
	q[start]=k;
	Quicksort(l,start-1);   //分治法 
	Quicksort(start+1,r);
}
void print()
{
	for(int i=0;i<MAX;i++)
	printf("%d ",q[i]);
	printf("\n");
}
int main()
{
	srand(time(0));
	printf("原始序列\n");
	for(int i=0;i<MAX;i++)
	{
		q[i]=10+rand()%90;
	}
	print();
	Quicksort(0,15);
	printf("快速排序\n");
	print();
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值