123abc456好好 123abc456好好
关注数: 48 粉丝数: 11 发帖数: 230 关注贴吧数: 42
求大佬,我用C语言学习快速排序算法,可就是编译错误啊,有没有 求大佬,我用C语言学习快速排序算法,可就是编译错误啊,有没有大佬帮帮忙,我的程序和教程的如下: 我自己的: #include<stdio.h> #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<high) { while(low<high && a[low]<=middle) low++; swap(a,low,high); while(low<high && a[high]>=middle) high++; swap(a,low,high); } return low; } void sort(int a[],int low,int high) { int tp; if(low<high) { 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<N;i++) scanf("%d",&a[i]); sort(a,0,N-1); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); return 0; } 教程上的: #include <stdio.h> #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; }
1 下一页