快速排序,用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;
}

猜你喜欢

转载自blog.csdn.net/attack_5/article/details/80401516
今日推荐