算法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]有点复杂,这个暂时不理解
posted @ 2022-09-04 09:24  铜锣湾陈昊男  阅读(8)  评论(0)    收藏  举报