为什么我这个排列有漏洞?
#include<stdio.h>void sort(int a[],int n);
void sort(int a[],int n){
int i,j,k,l;
for(i=0;i<n-1;i++){
for(k=i,j=i+1;j<n;j++){
if(a>a){
k = j;
}
if(k!=i){
l = a;
a=a;
a=l;
}
}
}
}
int main(){
int a,n;
int *p = &a;
printf("请输入十个数:");
for(n=0;n<10;n++){
scanf("%d",&a);
}
sort(p,10);
printf("由大到小排列后的:") ;
for(n=0;n<10;n++){
printf("%d",*(p+n));
}
return 0;
} void sort(int a[],int n){
int i,j,k,l;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
k=i;////////////////放在循环体里面
if(a>a){
k = j;
}
if(k!=i){//如果上面k=j那么不管以后是否a>a,k!=i都是成立的,所以k=i;应该放在循环体里面
l = a;
a=a;
a=l;
}
}
}
}
页:
[1]