一、概述
写一个快速排序算法。
果真是面试最喜欢问的问题,可惜在面试前我只是匆匆浏览了一遍,然后就略过了。以为会问很多C++的语法知识,结果一点没问,直接开始写代码。没有提示和补全,完全靠手打,我写的代码几乎就是只把思想说出来了,和伪代码差不多。
二、分析
1、我的代码
好惨。如下:
vector<int> quick(vector<int>& s)
{
/*int first=s[0];
vector<int> left,right;
for(int i=1;i<s.size();i++)
if(s[i]<first)
left.push_back(s[i]);
else
right.push_back(s[i]);
s=left+first+right;
quick(left);
quick(right);*/
int first=s[0];
int start=1,end=s.size()-1;
while(start<end)
if(s[end]>s[0])
end++;
continue;
else
{
if(s[start]<s[0])
start++;
continue;
else
swap(s[start],s[end]);
}
quick(s[0],s[start])
quick(s[star+1],s[s.size()-1]);
}
不管参数对或者错了。
输入一个vector,选第一个作为分界点,然后维护两个指针,start和end,从后往前找第一个小于分界点的值,再从前往后找第一个大于分界点的值,然后交换这两个值,当start不小于end时退出循环。
然后递归。
勉强可以从代码看出思路。
被吐槽顾头不顾尾,大概就是递归时参数完全不一样了,应该是vector我却用了两个int。
2、正确思路
代码如下:
#include <stdio.h