写一个最简单的快速排序,
也是我17年秋天校招时候给好多面试官写过的。
简单好理解,不解耦的写法。
#incude<iostream>
using namespace std;
void QuickSort(vector<int> array,int low,int high)
{
if(array.size()==0)
return;
if(array.size()==1)
return array;
int i =low,j=high; //定义i,j两个临时变量用来遍历容器,low和high要递归的时候当做条件,不能变。
int temp = a[i]; //从最左边开始选一个数开始比较
while(i<j) //直到i==j结束循环
{
while(i<j&&temp<a[j]) //从最末尾开始找一个比temp小的数
{
j--;
}
a[i]=a[j]; //用比temp小的这个数替换a[i],原先的a[i]不用担心被覆盖,因为temp就是a[i]赋值的。
while(i<j&&a[i]<temp) //从最开始找一个比temp大的数
{
i++;
}
a[j]=a[i]; //找到这个数去填补刚才挖走的a[j];
} //结束循环,选中的temp已经比完了vector中的所有的数
a[i]=temp; //把temp放到最适合他的位置,就是a[i]或者a[j]
QuickSort(array,low,i-1); //递归a[i]左半边
QuickSort(array,i+1,high); //递归a[i]右半边
}
int main()
{
std::vector<int> array={12,3,45,6,7};
array.push_back(1);
array.push_back(30);
const int size = array.size();
QuickSort(array, 0, size-1);
for(auto& num : array)
{
std::cout<<num<<" ";
}
std::cin.get();
//VS2017之后好像就不需要手动return 0
}