http://www.tyut.edu.cn/kecheng1/site01/suanfayanshi/quick_sort.asp
第一次快速排序的具体做法是:设置变量i指向参加排序的记录序列中第一个位置0,变量j指向参加排序的记录序列中最后位置n-1。首先保存记录R0,使得R[0]为空出的位置(空位在前一区),这时,令j向前扫描,寻找小于R0的记录,假设找到的记录是R[ j ],将记录R[ j ]移到当前空位中;这时R[ j ]成为空位(空位在后一区),再令i自i+1起向后扫描,寻找大于R0排序码的记录,假设找到的记录是R[ i ],将记录R[ i ]移到当前空位中,空位又到了前一区,然后再令j自j-1起向前扫描。如此交替改变扫描方向,从两端向中间靠拢,直到i=j,这时i所指的位置为R0的最终位置
void quickSort(SortObject * p,int l,int r){
int i,j;
RecordNode temp;
if(l>=r)return;
i=l;j=r;temp=p->record[i];
while(i!=j)
{
while((p->record[j].key>=temp.key)&&(j>i))j--;
if(i<j)p->record[i++]=p->record[j];
while((p->record[i].key<=temp.key)&&(j>i))i++;
if(i<j)p->record[j--]=p->record[i];
}
p->record[i]=temp;
quickSort(p,l,i-1);
quickSort(p,i+1,r)
}