算法4:快速排序(分而治之思想延伸)
1、快速排序概念,快速排序是一种选择基准值来进行分区排序的算法,用到的是一种分而治之的思想(这个思想很重要)
2、我们一般是把一个数组第一个元素当作基准值来对比数的大小,分为上下两个数组,下的数组是一个比基准值小的数组,上的数组是一个比基准值大的数组,之后把基准值和上下两个数组合起来就ok,之后把上下两个数组当作第一步处理的数组开始递归。
3、自己根据算法图解写的代码如下:
#include<iostream>
#include<vector>
using namespace std;
class solution
{
public:
vector<int> pinJie(vector<int>&a,int b,vector<int>&c)//这个是一个将上下两个数组和基准值合在一起的数组操作
{
a.push_back(b);
for (int i = 0; i < c.size(); i++)
{
a.push_back(c[i]);
}
return a;
}
vector<int> fastSort(vector<int>& v)//快速排序方法
{
if (v.size() < 2)
{
return v;
}
int piovt = v[0];
vector<int>v1;//比基准值小的数放这里
vector<int>v2;//比基准值大的数放这里
for (int i = 1; i < v.size(); i++)
{
if (v[i] < piovt)
{
v1.push_back(v[i]);
}
else
{
v2.push_back(v[i]);
}
}
vector<int>a = fastsort(v1);
vector<int>b = fastsort(v2);
return pinJie(a,piovt,b);
}
};
void printve(vector<int>&v)//打印数组
{
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
}
int main()
{
vector<int>v;
for (int i = 0; i < 10; i++)//生成一个随机数组
{
int o =i+rand() % 10;
v.push_back(o);
}
printve(v);
solution so;
vector<int>f=so.fastsort(v);
printve(f);
system("pause");
return 0;
}
4、力扣上用第二个元素作为基准nums[1]有点复杂,这个暂时不理解

浙公网安备 33010602011771号