快速排序,用C语言实现

【算法思想】从待排序记录序列中选取一个记录为枢轴,其关键字设为K1,然后将其余关键字小于k1的记录移到前面,而将关键字大于或者等于k1的记录移到后边,结果将待排序记录序列分成两个子表,最后将关键字为k1的记录插到其分界线的位置处。将这个过程称为一次快速排序。通过一次划分后,就以关键字为k1的记录为界,将待排序序列分成了两个子表,且前面子表中所有记录的关键字均小于k1,而后面子表中的表长不超过1为止,此时待排序记录序列就变成了一个有序表。

具体代码:

void QKSort(RecordType r[],int low,int high)
{   /*对记录数组r[low..high]用快速排序算法进行排序*/
if(low<high)
{
pos=QKPass(r,low,high);/*调用一趟快速排序,以枢轴元素为界划分两个子表*/
QKPass(r,low,pos-1);/*对左部子表快速排序*/
QKPass(r,pos+1,high);/*对右部子表快速排序*/
}
}
int QKPass(RecordType r[],int low,int high)
{
x=r[low];                /*选择基准记录*/
whie(low<high)
{
while(low<high&&r[high].key>=x.key)
high--;            /*high从右到左找小于x.key的记录*/
if(low<high)
{
r[low]=r[high];
low++;
}        /*找到小于x.key的记录,则送入“空单元”r[low]*/
while(low<high&&r[low].key<x.key)  /*low从左到右找大于或者等于x.key的记录*/
low++;
if(low<high)
{
r[high]=r[low];
high--;
} /*找到大于x.key的记录,则送入“空单元”r[high]*/
}
r[low]=x;
return low;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值