直接上代码 代码和解释混合 具体解释每句代码的意思
至于快速排序的思想网上有很多 就不解释了
代码来自于程序员面试笔试宝典
#include<iostream> //导入头文件
using namespace std; //引用命名空间
void QuitSort(int *a,int low,int high)
{
//x用来存基准数
int x=0
//要先判读传入参数 是否合法 如果不和发就返回
if(low>=high)
return;
/*把第一数个当做基准数 这里有两个数i,j分别代表数组的最高位和最低位*/
int i=low;
int j=high;
x=a[low];
//每一次排序结束的标志就是当j不在大于i 这个时候所有的数都已经走过了一遍
while(i<j)
{
/*这个循环的作用就是判断最后一位是不是小于基准数 不是小于基准数就看前一位是不是小于基准数*/
while(i<j && a[j]>=x)
{
j--;
}
/*啊,终于找到比基准数小的了 这时候就把基准数放到数组的第一位吧 因为第一位已经被我们拿出来了 其实并没有拿走第一位 只是可以这么理解而已 不要忘记判断 这次排序是不是已经结束了*/
if(i<j)
{
a[i]=a[j];
i++;
}
//这个就是同理了 从前面找到一个比基准数大的 放到之前后面被拿走的那个数的位置
while(i<j && x>=a[i])
{
i++;
}
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=x;
//我们已经排序了第一次 就递归调用啦
QuitSort(a,low,i-1);
QuitSort(a,i+1,high);
}
int main()
{
int i=0;
int num[]={5,4,9,8,7,6,0,1,3,2};
int len=sizeof(num)/sizeof(num[0]);
QuitSort(num,0,len-1);
for(i;i<len;i++)
{
cout<<num[i]<<endl;
}
return 0;
}