快速排序
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;
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;
}