c_cpp 单链表的快速排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 单链表的快速排序相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct ListNode* List;
struct ListNode
{
int key;
List next;
};
void QuickSort( List head, List tail )
{
if ( head->next == tail || head->next->next == tail )
return;
List mid = head->next;
List p = head;
List q = mid;
int pivot = mid->key;
List t = mid->next;
while ( t != tail )
{
if ( t->key < pivot )
p = p->next = t;
else
q = q->next = t;
t = t->next;
}
p->next = mid;
q->next = tail;
QuickSort( head, mid );
QuickSort( mid, tail );
}
void print_list(List head) {
struct ListNode *p;
for (p = head; p != NULL; p = p->next) {
printf("%d ", p->key);
}
printf("\n");
}
int main(void) {
List head;
struct ListNode* p;
int i = 0;
/**
* 初始化链表
*/
head = (List)malloc(sizeof(struct ListNode));
head->next = NULL;
head->key = 0;
srand((unsigned)time(NULL));
for (i = 1; i < 11; ++i) {
p = (struct ListNode*)malloc(sizeof(struct ListNode));
p->key = rand() % 100 + 1;
p->next = head->next;
head->next = p;
}
print_list(head);
printf("---------------------------------\n");
QuickSort(head,NULL);
print_list(head);
return 0;
}
以上是关于c_cpp 单链表的快速排序的主要内容,如果未能解决你的问题,请参考以下文章
单链表的快速排序(转)
写给自己看的单链表:快速排序
精益求精单链表归并排序与快速排序
单链表的排序
快速找到未知长度的单链表的中间结点
算法总结之 单链表的选择排序