单链表快速排序

2015.11.27  面试一点资讯 ,面试官是很nice的校友师兄,无奈基本功太差,跪了!

#include <iostream>

using namespace std;

#define random(x) (rand()%x)

struct ListNode
{
	int value;
	ListNode* next;
};

void create_list(ListNode* head)
{
	ListNode* pNode = head;
	for(int i = 0; i < 10; i++)
	{
		ListNode* pNew = new ListNode;
		pNew->value = random(10);
		pNew->next = NULL;

		pNode->next = pNew;
		pNode = pNode->next;
	}
}

void print_list(ListNode* head)
{
	ListNode* pNode = head->next;
	while(pNode != NULL)
	{
		cout << pNode->value << ' ';
		pNode = pNode->next;
	}
	cout << endl;
}

void quick_sort(ListNode* head, ListNode* tail)
{
	if(head->next == tail || head->next->next == tail)
		return;

	ListNode* mid = head->next;
	ListNode* pLess = head;
	ListNode* pGreater = mid;
	int pivot = mid->value;

	ListNode* pNode = mid->next;

	while(pNode != tail)
	{
		if(pNode->value < pivot)
		{
			pLess->next = pNode;
			pLess = pNode;
		}
		else
		{
			pGreater->next = pNode;
			pGreater = pNode;
		}

		pNode = pNode->next;
	}

	pLess->next = mid;
	pGreater->next = tail;

	quick_sort(head, mid);
	quick_sort(mid, tail);
}


int main()
{
	ListNode* head = new ListNode;
	head->value = -1;
	head->next = NULL;
	
	create_list(head);
	print_list(head);
	quick_sort(head, NULL);
	print_list(head);

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值