根据自己命名习惯与方便理解进行实现快速排序,仅做记录,后续完善。
//随机主元
void random(vector<int>& root, int headIndex, int tailIndex)
{
int i = rand() % (tailIndex - headIndex + 1) + headIndex;
swap(root[i], root[tailIndex]);
}
int partition(vector<int>& root, int headIndex, int tailIndex)
{
//random(root, headIndex, tailInde); //此处可以使用随机算法获取主元
int par = root[tailIndex]; //分割主元
int i_min = headIndex;
for(int j_max = headIndex; j_max < tailIndex; j_max++)
{
if(root[j_max] <= par)
{
swap(root[i_min++], root[j_max]);
}
}
swap(root[i_min], root[tailIndex]);
return i_min;
}
void quickSort(vector<int>& root, int headIndex, int tailIndex)
{
if(headIndex < tailIndex)
{
int midIndex = partition(root, headIndex, tailIndex);
quickSort(root, headIndex, midIndex-1);
quickSort(root, midIndex+1, tailIndex);
}
}
void mySort(vector<int>& nums) {
quickSort(nums, 0, nums.size()-1);
}