用指针方法对10个整数按由大到小顺序排序
法一
int main(){
void sort(int x[],int n);//声明sort函数
int i,*p,a[10];
p=a;//指针变量p指向a[0]
printf("输入10个数:\n");
for(i=0;i<10;i++){//输入10个整数
scanf("%d",p++);
}
p=a;//指针变量p重新指向a[0]
sort(p,10);//调用sort函数
for(p=a,i=0;i<10;i++){
printf("%d ",*p);//输出排序后的10个数组元素
p++;
}
printf("\n");
return 0;
}
void sort(int x[],int n){//定义sort函数,x是形参数组名
int i,j,k,t;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){//双层循环遍历数组 各数组元素进行比较
if(x[j]>x[k]){//判断出小的元素下标
k=j;//获取大值的下标
}
}
if(k!=i){//判断是否为原来的下标,不是则运行
t=x[i];//交换元素 x[i]=x[k]
x[i]=x[k];
x[k]=t;
}
}
}
法二
int main(){
void sort(int *x,int n);//声明sort函数
int i,*p,a[10];
p=a;//指针变量p指向a[0]
printf("输入10个数:\n");
for(i=0;i<10;i++){//输入10个整数
scanf("%d",p++);
}
p=a;//指针变量p重新指向a[0]
sort(p,10);//调用sort函数
for(p=a,i=0;i<10;i++){
printf("%d ",*p);//输出排序后的10个数组元素
p++;
}
printf("\n");
return 0;
}
void sort( int *x,int n){//形参x是指针变量
int i,j,k,t;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){//双层循环遍历数组 各数组元素进行比较
if(*(x+j)>*(x+k)){// *(x+j)就是x[j],其他亦然
k=j;
}
}
if(k!=i){
t=*(x+i);
*(x+i)=*(x+k);
*(x+k)=t;
}
}
}
不懂请留言,谢谢!