代码如下:
void qsort(int *a, int n) {
if (n <= 1) {
return;
}
int i = 1, j = n - 1;
int temp;
while (i <= j) {
while (a[i] <= a[0] && i <= j) i++;
while (a[j] >= a[0] && j >= i) j--;
if (i < j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
temp = a[0];
a[0] = a[i - 1];
a[i - 1] = temp;
qsort(a, i - 1);
qsort(a + i, n - i);
}
完整代码:
#include <iostream>
#include <cassert>
using namespace std;
void qsort(int *a, int n) {
if (n <= 1) {
return;
}
int i = 1, j = n - 1;
int temp;
while (i <= j) {
while (a[i] <= a[0] && i <= j) i++;
while (a[j] >= a[0] && j >= i) j--;
if (i < j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
temp = a[0];
a[0] = a[i - 1];
a[i - 1] = temp;
qsort(a, i - 1);
qsort(a + i, n - i);
}
void produce(int *a,int n)
{
assert(RAND_MAX==0x7fff);
for(int i=0;i<n;i++)
{
int r;
while((r=rand())>=30000);
a[i]=r;
}
}
void check(int* a,int n)
{
for(int i=0;i<n-1;i++)
{
assert(a[i]<=a[i+1]);
}
}
void print(int *a,int n)
{
for(int i=0;i<n;i++)
{
cout<<a[i]<<"\t";
}
cout<<endl;
}
int main()
{
int a[1000];
int n=sizeof(a)/sizeof(int);
produce(a,n);
print(a,n);
qsort(a,n);
print(a,n);
check(a,n);
system("pause");
return 0;
}