快排
void qsort(int a[];int left,int right){
int i=left,j=right;
int base=a[left];
while(i<j){
while(i<j&&a[j]>=base){
j--;
}
if(i<j){
a[i++]=a[j];
}
while(i<j&&a[j]<base){
i++;
}
if(i<j){
a[j--]=a[i];
}
a[i]=base;
qsort(a,left,i-1);
qsort(a,i+1,right);
}
基于快排的链表的排序
单链表没有前驱结点,采用双指针的方法
void qsortList(struct Student *left,struct Student *right){
if(left==right\\left->next==right)
return left;
int base=left->a; //基准节点值
struct Student *slow=left; //慢指针
struct Student *fast=slow->next; //快指针
while(fast!=right)
{
if(fast->a<base) // 快指针所在结点的值小于基准值
{
slow=slow->next; //慢指针走一步
swap(slow->a,fast->a); //交换值
}
fast=fast->next; //大于基准值时后挪
}
swap(slow->a,left->a); //交换慢指针节点值与基准节点值
qsort(left,slow);
qsort(slow->next,right);
}