快排

//单向快排
int Partition(int *ar , int left , int right)
{
	int i = left - 1 , j = left;
	int tmp = ar[j];
	while(j <= right)
	{
	  if(ar[j] <= tmp)
	  {
		  std::swap(ar[i+1] , ar[j]);
		  i+=1;
	  }
	  j+=1;
	}
	 std::swap(ar[left] , ar[i]);
	 return i;
}
void QuickPass(int *ar , int left , int right)
{
	if(left < right)
	{
	  int pos = Partition(ar , left , right);
	  QuickPass(ar , left , pos - 1);
	  QuickPass(ar , pos + 1 , right);
	}
}
void QuickPass(int *ar , int n)
{
	if(ar == NULL && n <= 1) return;
}
//单链表快排(带头结点)
ListNode * ListPartition(ListNode *left , ListNode *right)
{
	ListNode *i = left;
	ListNode *j = left->next;
	ElemType tmp = j->data;
	while(j != right)
	{
		if(j->data <= tmp)
		{
			swap(i->next->data , j->data);
			i = i->next;
		}
		j = j->next;
	}
	swap(left->next->data , i->data);
	return 1;
}
void ListQuickPass(ListNode *left , ListNode *right)
{
	if(left->next != right)
	{
	  ListNode * pos = ListPartition(left , right);
	  QuickPass(left , pos);
	  QuickPass(pos , right);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值