//算法核心思想并不难理解,即取一个值作为参考值,大于等于参考值的放在一边,小于参考值的放在另一边 //程序实现的核心是对两个指针的操作,针对每一个无序的块使用两个指针,一个从左向右滑动,另一个相反, //向右滑动的指针如果碰到一个大于参考值的数,则另一个指针开始向右滑动,直到找到一个小于参考值的数,然后二者交换位置
#include <iostream> using namespace std; void myqsort(int* x,int* y) { int temp,w,* u,*v; u=x;v=y;w=*y; if(x==y)return; while(u!=v)//开始调换元素位置,大于等于w的放在右边,其余放在左边 { if(*u>w)//检查当前u所指向的元素是否大于末尾元素的值,是则执行下面语句块 { //向左查找可以交换的元素 while(u!=v) { if(*v<=w){temp=*u;*u=*v;*v=temp;break;}//找到这样一个元素,则立即进行交换 v--; } } if(u==v)break; u++; } myqsort(x,u-1); myqsort(u,y); } int _tmain(int argc, _TCHAR* argv[]) { int a[]={8,992,35,78,123,6,5,1,10,88,99,123,754,1000,1,0,55}; myqsort(a,a+sizeof(a)/4-1); for(auto& x:a)cout<<x<<endl; return 0; }