快速排序大家都很熟悉了,实现的时候都是用的数组,但是有没有想过链表进行快速排序呢(当然还有链表归并排序,可以想一下链表能不能堆排序,这个下篇文章再说);
我第一次听说链表快速排序是去年听师兄说的,当时他去百度面试,直接就要求写链表的快速排序,当时也没往心里去,现在有时间了,写了一下。
typedef struct Node
{
int data;
struct Node *next;
}List;
void my_swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void sort_list(List *phead, List *pend)
{
if (phead == NULL || pend == NULL)
return ;
if (phead == pend)
return ;
struct Node *pslow = phead;
struct Node *pfast = phead->next;
struct Node *prev = phead;
while (pfast != pend) {
if (pfast->data < phead->data) {
prev = pslow;
pslow = pslow->next;
my_swap(&pslow->data, &pfast->data);
}
pfast = pfast->next;
}
if (pfast->data < phead->data) {
prev = pslow;
pslow = pslow->next;
my_swap(&pslow->data, &pfast->data);
}
my_swap(&phead->data, &pslow->data);
sort_list(phead, prev);
sort_list(pslow->next, pend);
}
参考资料:www.geeksforgeeks.org