楼主,你的代码,在下实在看不懂!!!
所以在下重新写了一个,#include <iostream>
#define n 5
using namespace std;
//快排函数
void quicksort(int * a , int left, int right);
int main(void)
{
int a[n] = 0;
for(int i=0; i<n; i++)
{//输入数据
cin >> a[i];
}
int left = 0;
int right = n-1;
//递归排序
quicksort(a, left, right);
for(int j=0; j<n; j++)
{//输出结果
cout << a[j] <<" ";
}
cout << endl;
return 0;
}
void quicksort(int * a , int left, int right)
{
int temp = a[left]; //基准数据//将左边第一个作为基准数据
int i = left;
int j = right;
if(left > right)
return ;
while(i != j)
{//一直进行直到ij相遇
while(a[j] >= temp && i < j)
{//从最右边开始比较//必须的//如果大于基准数据,那么j--,否则,开始左边的比较
j--;
}
while(a[i] <= temp && i < j)
{//如果小于基准数据,i++, 否则交换a[i], a[j]
i++;
}
if(i < j)
{//交换
int t = 0;
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
//当i和j相遇时候,将基准数据和相遇点的数据交换
a[left] = a[i];
a[i] = temp;
//递归排列相遇点左边和右边的数据
quicksort(a, left, i-1);
quicksort(a, i+1, right);
}
|