从小到大
#include<stdio.h>
#define N 4
void kuaisu(int a[],int left,int right)
{
int i=left;
int j=right;
int key=a[i];
if(left>right)
{
return;//如果函数用int定义会报错
}
if(i<j)
{
while(i<j&&key<a[j])//此处是while不是if
{
j--;
}
a[i]=a[j];
while(i<j&&key>a[i])
{
i++;
}
a[j]=a[i];
}
a[i]=key;//这句不能漏掉!!!
kuaisu(a,left,i-1);
kuaisu(a,i+1,right);
}
void print(int a[])
{
for(int i=0;i<N;i++)
{
printf("%d ",a[i]);
}
}
int main()
{
int a[4]={1,5,2,4};
kuaisu(a,0,3);//a代表数组的首元素,0表示从数组下表为0的数开始,3表示到数组下标为3的位置结束
print(a);
return 0;
}
从大到小
#include<stdio.h>
#define N 4
void kuaisu(int a[],int left,int right)
{
int i=left;
int j=right;
int key=a[i];
if(left>right)
{
return;//如果函数用int定义会报错
}
if(i<j)
{
while(i<j&&key>a[j])
{
j--;
}
a[i]=a[j];
while(i<j&&key<a[i])
{
i++;
}
a[j]=a[i];
}
a[i]=key;
kuaisu(a,left,i-1);
kuaisu(a,i+1,right);
}
void print(int a[])
{
for(int i=0;i<N;i++)
{
printf("%d ",a[i]);
}
}
int main()
{
int a[4]={1,5,2,4};
kuaisu(a,0,3);//a代表数组的首元素,0表示从数组下表为0的数开始,3表示到数组下标为3的位置结束
print(a);
return 0;
}
注:数组长度可以在#define N 4处改变,同时要改是的main函数里的数组a。