首先定义一个存储数据的结构,该结构定义如下:
#define N=20 //N为待排序序列的个数
typedef struct
{
int key;
DataType other;
}RecType ;
RecType R[N+1];
(1)定义N+1主要是为了R[0]不用存放数据,从1计数到N,数组的下标直接和序号直接对应;
(2)预留R[0]可做其他用处,比如:监视哨,或者记录交换的辅助空间。
一次划分和快速排序递归算法的函数实现
int partition (RecType R[],int low ,int high)
{
int k;
R[0]=R[low];
k=R[0].key;
while(low<high)
{
while((low<high)&&R[high].key>k)
high--;
if(low<high)
R[low]=R[high];
while((low<high)&&R[low].key<k)
low++;
if(low<high)
R[high]=R[low];
}
R[low]=R[0];
return low;
}
void QSort(RecType R[],int low,int high)
{
int part;
if(low<high)
{
part=partition(R,low,high);
QSort(R,low,part-1);
QSort(R,part+1,high);
}
}