如何根据链表的某一元素对整体进行快速排序?
数组的快速排序法
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);
}