快速排序
递归版快速排序栈炸了,换个安全一点的,动手将算法和数据结构一个个实现出来真是快落,记录一下自己的成果,刷题的时候就不用反复造轮子了。
template<typename T>
void quickSort(std::vector<T>& nums) {
std::vector<std::vector<int>> stk;
std::vector<int> temp;
int lo = 0;
int hi = nums.size() - 1;
temp.push_back(lo);
temp.push_back(hi);
stk.push_back(temp);
while (!stk.empty()) {
lo = stk.back()[0];
hi = stk.back()[1];
stk.pop_back();
if (lo < hi) {
int cur = lo;
int p = lo;
for (int i = lo; i <= hi; i++) {
if (nums[cur] > nums[i]) {//p表示轴点应该在的位置
p++;
std::swap(nums[i], nums[p]);
}
}
std::swap(nums[cur], nums[p]);//此时数组被分为 [lo,p-1] p [p+1,hi] 三个部分
temp[0] = lo;
temp[1] = p - 1;
if (temp[0] != temp[1]) stk.push_back(temp);
temp[0] = p + 1;
temp[1] = hi;
if (temp[0] != temp[1]) stk.push_back(temp);
}
}
}
这什么垃圾代码,我自己都看不懂,淦
算了,又不是不能用