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 单链表的快速排序的主要内容,如果未能解决你的问题,请参考以下文章

单链表的快速排序(转)

写给自己看的单链表:快速排序

精益求精单链表归并排序与快速排序

单链表的排序

快速找到未知长度的单链表的中间结点

算法总结之 单链表的选择排序