yuanzhen:~/C_script$ cat quicksort.cpp
#include <iostream> #include <cstdlib> #include <vector> #include <cstdio>#define random(x) (rand()%x)
std::vector<int> vec;
std::vector<int> init(int n) //初始化 vector n个值
{ std::vector<int> avec(n); int x=n*10; for (int i=0;i<avec.size();++i) { avec[i]=random(x); } return avec; }void show(std::vector<int> avec)
{ for(int i=0;i<avec.size();++i) { std::cout << avec[i] << "\t"; } std::cout << std::endl; }void quicksort(int left, int right)
{ if(left < right) { int i=left, j=right, t, m; while (i < j) { while(i<j && vec[j]>=vec[left]) // 基准值为 vec[left], 右侧开始遍历查找小于基准值的数值 { j--; } while(i<j && vec[i]<=vec[left]) // 左侧遍历查找大于基准值的数值 { i++; } m=vec[j]; vec[j]=vec[i]; // 将右侧小于基准的数值与左侧大于基准的数值进行互换 vec[i]=m; show(vec); } t=vec[i]; vec[i]=vec[left]; vec[left]=t; std::cout << i << std::endl; // 当左侧与右侧相遇时, 基准值和该值互换, 或基准值归位 show(vec); quicksort(left, i); quicksort(i+1, right); } } int main(int argc, char** argv) { system("clear"); int n; std::cin >> n; vec=init(n); show(vec); quicksort(0, n-1); show(vec); return 0; }