快速排序

快速排序

// An highlighted block
void _QuickSort(int *data, int left, int right)
{
	if (left >= right)
	{
		return;
	}
	int pick_index = RandomPick(left, right);
	
	int pick_data = data[pick_index];
	data[pick_index] = data[left];
	data[left] = pick_data;
	
	int pick_left = left;
	int pick_right = right;
	
	while(pick_left < pick_right)
	{
		while(pick_left < pick_right && data[pick_right] <= pick_data)
			pick_right--;
		data[pick_left] = data[pick_right];

		while (pick_left < pick_right && data[pick_left] >= pick_data)
			pick_left++;
		data[pick_right] = data[pick_left];
	}
	data[pick_right] = pick_data;
	
	pick_index = pick_right;
	/*data[pick_index] = data[right];
	data[right] = pick_data;

	int i = left - 1;
	for (int j = left; j<right; ++j)
	{
		if (data[j] <= pick_data)
		{
			i++;
			int tmp = data[i];
			data[i] = data[j];
			data[j] = tmp;
		}
	}

	data[right] = data[i+1];
	data[i+1] = pick_data;

	pick_index = i + 1;*/

	if (left < pick_index)
	{
		_QuickSort(data, left, pick_index - 1);
	}
	if (right > pick_index)
	{
		_QuickSort(data, pick_index + 1, right);
	}
}


void QuickSort(int *data, int data_size)
{
	if (!data || data_size <= 0)
	{
		return;
	}
	_QuickSort(data, 0, data_size - 1);
}



int _tmain(int argc, _TCHAR* argv[])
{
	int arr[] = {10, 5, 5, 9, 4, 4, 8, 3, 7, 2, 6};
	QuickSort(arr, sizeof(arr)/sizeof(int));
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值