快速排序学习 the c programming languish

include”stdio.h”

void QuickSort(int *v, int left ,int right);
void swap (int *s, int i,int j);

void main()
{
int i;
int s[] = {32,20,65,10,70};
for(i=0;i<=4;i++)
{
printf(“%d ..”,s[i]);
}
printf(“\n”);
// swap(s,2,3);
QuickSort(s,0,4);

for(i=0;i<=4;i++)
{
    printf("%d..",s[i]);
}

}

void QuickSort(int *v, int left ,int right)
{
int pivot; //用于记录中间zhi
int cnt;// bian li

if(left>=right) //这里必须要有这一步不然总是跳不出去 
return;

pivot = (left+right)/2;
swap(v,left,pivot); //注意left的值并不会改变 
for(cnt=left+1;cnt<=right;cnt++)
{
    if(v[cnt]<v[pivot])
    swap(v,++pivot,cnt);//这里不能用left 他是个保留值 
}
swap(v,left,pivot);
//以下代码是递归调用 
QuickSort(v, left ,pivot-1);
QuickSort(v, pivot+1 ,right);   

}
//这个函数完成数组中的两个的交换
void swap(int *s, int i,int j)
{
int temp;
temp = s[i];
s[i] = s[j];
s[j] = temp;
}


代码的原理
快速排序也是分治法思想的一种实现,他的思路是使数组中的每个元素与基准值(Pivot,通常是数组的首个值,A[0])比较,数组中比基准值小的放在基准值的左边,形成左部;大的放在右边,形成右部;接下来将左部和右部分别递归地执行上面的过程:选基准值,小的放在左边,大的放在右边。。。直到排序结束。

步骤:

1.找基准值,设Pivot = a[0]

2.分区(Partition):比基准值小的放左边,大的放右边,基准值(Pivot)放左部与右部的之间。

3.进行左部(a[0] - a[pivot-1])的递归,以及右部(a[pivot+1] - a[n-1])的递归,重复上述步骤。

以下代码是其核心代码
void QuickSort(int *v, int left ,int right)
{
int pivot; //用于记录中间zhi
int cnt;// bian li

if(left>=right) //这里必须要有这一步不然总是跳不出去 
return;//上面这两句是保证递归调用的时候能有出去的时候

pivot = (left+right)/2;//这里是保存期中间的值
swap(v,left,pivot); //注意left的值并不会改变 
for(cnt=left+1;cnt<=right;cnt++)
{
    if(v[cnt]<v[pivot])
    swap(v,++pivot,cnt);//这里不能用left 他是个保留值 
}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值