简单的快速排序解决思路

简单的快速排序
#include "QuickSort.h"
#include <iostream>
using namespace std;
QuickSort::QuickSort(vector<int>_list, int _len)//构造一个顺序表
{
for(int i=0; i<_len; i++)list.push_back(_list[i]);
this->len = _len;
}
//快速排序
void QuickSort::quick_sort(int left, int right)
{
  int i = left; //指示器
  int j = right;//指示器
  int pivot = list[left]; //pivot基数,left为选数组中的第left+1个当基数 第二次循环pivot为-842150451?????????
  while(i<j) //仅当区间长度大于1时才须排序
  {
while(i < j && list[j] >= pivot) //从右向左扫描 换
j--; //找到第一个比基数小的元素
if(i < j) 
swap(i,j); //放至基数左边
while(i<j && list[i] <= pivot) //从左向右扫描,找第一个大于基数的记录list[i]
i++; //找到比基数大的元素
if(i < j) //放至基数右边
swap(i,j);
  }
  if(i != left) quick_sort(left, i-1); //对左区间递归排序!!!! //对list[left,....,i-1]排序 //为什么是i-1而不是i???
  if(j != right)quick_sort(j+1, right); //对右区间递归排序!!!! //对list[j+1,...,right]排序
}
void QuickSort::swap(int i,int j) //交换两元素位置
{
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
void QuickSort::out()
{
for(int i=0; i<len; i++)
{
cout << list[i] << " ";
if((i+1)%18 == 0)cout << endl;

}
cout <<endl;
}

//主函数!!!!!!!!!!!!!!
#include "QuickSort.h"
#include<iostream>
using namespace std;
#define num 3
// 4 3 2 1
int main()
{
vector<int>test(num);
cout << "请输入数字: " <<endl;
for(int i=0; i< num; i++)
cin >> test[i];
QuickSort test_sort(test,test.size());

test_sort.quick_sort(0, 3);
test_sort.out();
return 0;
}
问题:
输入4 3 2 1 后,结果为
-842150451 2 3
调试发现当数组 变为 1 3 2 4时,递归进行排序时int pivot = list[left];//第二次循环pivot为-842150451?????????
但我觉得我数组并没有越界什么的,找不到问题的所在,求解.

------解决方案--------------------
在对左右递归之前好像没有把基准元素放回到分划的位置,掉了句list[i]=pivot;
------解决方案--------------------
你定义的num是3,也就是test只能存3个元素。
你把num改成4试试。