如何根据链表的某一元素对整体进行快速排序?
数组的快速排序法
void QuickSort(int * a,int left,int right)
{
if(left>=right)
return ;
int l=left,r=right;
int value=left;
while(l<r)
{
while((a[r]<=value)&&(l<r))
r-;
if(l<r)
{
a[l]=a[r];
l++;
}
while((a[l]>=value)&&(l<r))
l++;
if(l<r)
{
a[r]=a[l];
r--;
}
}
a[l]=value;
QuickSort(a,left,l-1);
QucikSort(a,r+1,right);
}
链表的快速排序遇到的困难
- 对链表而言,包含对个数据,因此要根据某一元素排序,交换其他所有元素。
- 由于链表只能依次进行查找,相对于数组排序不能用大于小于表示元素的关系。
- 由于右边的元素要向前查找,因此最好使用双向链表进行分析。
链表的快速排序方法
void RankList(Stu * left, Stu * right)
{
if (left == right)
return;
Stu * l, *r;
l = left;
r = right;
int value = left->score;
do
{
while ((l != r) && (r->score <= value))
r = r->front;
if (l != r)
{
l->score=r->score;
l = l->next;
}
while ((l != r) && (l->score >= value))
l = l->next;
if (l != r)
{
r->score = l->score;
r = r->front;
}
} while (l != r);
l->score = value;
if (l!=left)
RankList(left,l->front);
if (r!=right)
RankList(r->next,right);
}