该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求大佬,我用C语言学习快速排序算法,可就是编译错误啊
,有没有大佬帮帮忙,我的程序和教程的如下:
我自己的:
#include
#define N 10
void swap(int a[],int i,int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
int part(int a[],int low,int high)
{
int middle=a[low];
while(low
{
while(low
low++;
swap(a,low,high);
while(low=middle)
high++;
swap(a,low,high);
}
return low;
}
void sort(int a[],int low,int high)
{
int tp;
if(low
{
tp=part(a,low,high);
sort(a,low,tp-1);
sort(a,tp+1,high);
}
}
int mian()
{
int a[N],i;
for(i=0;i
scanf("%d",&a[i]);
sort(a,0,N-1);
for(i=0;i
printf("%d ",a[i]);
printf("\n");
return 0;
}
教程上的:
#include
#define N 10
void swap(int a[], int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
int part(int a[], int low, int high)
{
int middle;
middle= a[low];//单纯的记录值
while (low < high)//以pivoekey为交换媒介(枢轴),将大于它的放在后边,小于它的放在前面
{
while (low < high && a[high] >= middle)//条件判断 low < high
high--;
swap(a, low, high);
while (low < high && a[low] <= middle)
low++;
swap(a, low, high);
}
return low;//返回枢轴所在位置
}
void QSort(int a[], int low, int high)
{
int tp;
if (low < high)//是 if
{
tp =part(a, low, high);//将a[]一分为二
QSort(a, low,tp - 1);//对低子表递归排序
QSort(a, tp + 1, high);//对高子表递归排序
}
}
int main()
{
int i;
int a[N];
for (i = 0; i < N; i++)
scanf("%d",&a[i]);
QSort(a, 0, 9);
for (i = 0; i < N; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}