链表的快速排序

//链表的一个排序的过程
#include 
using namespace std;
typedef struct Node
{
	int number;
	struct Node *next;
}node;

//采用头插法,此时是没有头结点
void LinkInsert(node **head, node *n_num)
{
	if (*head == NULL)
	{
		n_num->next = NULL;
		*head = n_num;
		return;
	}
	n_num->next = *head;
	*head = n_num;
}
void swap(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}
node *GetQuick(node *Beginhead, node *Endhead)
{
	node *p = Beginhead;
	node *q = p->next;
	int key = p->number;
	while (q != Endhead)
	{
		if (q->number < key)
		{
			p = p->next;
			swap(p->number, q->number);
		}
		q = q->next;
	}
	swap(Beginhead->number, p->number);
	return p;
}
void LinkQuick(node *Beginhead,node *Endhead)
{
	if (Beginhead != Endhead)
	{
		node *partial = GetQuick(Beginhead, Endhead);
		LinkQuick(Beginhead, partial);
		LinkQuick(partial->next, Endhead);
	}
}
void Print(node *head)
{
	node *h = head;
	while (h != NULL)
	{
		cout << h->number << "  ";
		h = h->next;
	}
}

int main()
{
	int number;
	node *n_number = NULL;
	node *head = NULL;
	for (int i = 0; i < 6; i++)
	{
		cin >> number;
		n_number = (node *)malloc(sizeof(node));
		if (n_number == NULL)
		{
			cout << "malloc error!" << endl;
		}
		n_number->number = number;
		n_number->next = NULL;
		LinkInsert(&head, n_number);
	}
	cout << "列表的起始的状态:";
	Print(head);
	cout << endl;

	cout << "链表快排后的状态:";
	LinkQuick(head, NULL);
	Print(head);
	cout << endl;
	return 0;
}

 

你可能感兴趣的:(数据结构,链表的快速排序)