快速排序

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)

}

 

 

你可能感兴趣的:(快速排序)