快速排序

#include  
#include
 
int num[10]={1,5,2,6,7,3,8,0,4,22};
 
void swap(int* a,int*b)
{
int tmp;
tmp=*b;
*b=*a;
*a=tmp;
 
}
 
void sort(int* s_num,int left,int right)
{
if(left>=right)
return;
 
int mid_elm=(left+right)/2;
swap(&s_num[left],&s_num[mid_elm]);
int last=left;
 
for(int i=left+1;i<=right;i++)
if(s_num[i]
{
swap(&s_num[i],&s_num[++last]);
}
 
swap(&s_num[last],&s_num[left]);
sort(s_num,left,last-1);
sort(s_num,last+1,right);
 
}
int main()
 
{  int num[7]={0,2,13,4,7,1,3};
sort(num,0,6);
 
for(int i=0;i<7;i++)
printf("num is %d ",num[i]);
 
 
}  
 
 
以下是标准的方法,分别从后向前和从前向后搜索
void sort(int* s_num,int left,int right)
{
int sto_s_num=s_num[left];
int sav_hole=left;
int sav_r=right;
int sav_l=left;
 
if(left<0 || right<=0 ||left>right)
return;
while(left!=right)
{
while(s_num[right]>sto_s_num)
right--;
if(right==left)
goto over;
}
swap(&s_num[right],&s_num[sav_hole]);
sav_hole=right;
 
 
while(s_num[left]<sto_s_num)
left++;
if(right==left)
goto over;
}
swap(&s_num[left],&s_num[sav_hole]);
sav_hole=left;
}
 
over:
sort(s_num,sav_l,sav_hole-1);
sort(s_num,sav_hole+1,sav_r);
 
}

转载于:https://www.cnblogs.com/yurius/archive/2013/01/12/2857561.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值