先看一下不用指针的写法(函数参数为数组名)
void select_sort(int a[],int n){
int i,max,temp;
for(i=0;i<n-1;i++){
max=i;
for(j=i+1;j<n;j++){
if(a[max]<a[j])
max=j;
}
//交换
if(max!=i){//max值变了之后才交换
temp=a[i];
a[i]=a[max];
a[max]=temp;
}
}
}
其实要把上面改成用指针的写法,没什么可说的,把数组名看成地址就完事了
void sort(int *p,int n){
int *i,*j,*max,temp;
for(i=p;i<p+n-1;i++){
max=i;
for(j=i+1;j<p+n;j++){
if((*max)<(*j)){
max=j;
}
}
//交换
if(max!=i){
temp=*i;
*i=*max;
*max=temp;
}
}
}
其实这个在排序的时候是用地址来排的,感觉和上面不用指针的写法差别有点大,特别是循环的判断条件那里,其实这个可以简化一下,就是不用地址,用地址的增量来写循环
void sort1(int *p,int n){
int i,j,max,temp;
for(i=0;i<n-1;i++){
max=i;
for(j=i+1;j<n;j++){
if(p[max]<p[j]){
max=j;
}
}
if(max!=i){
temp=p[i];
p[i]=p[max];
p[max]=temp;
}
}
}
今天写这个代码的时候,感觉蛮有意思,突然就想起来数学里的增量。
这两种写法,就是整个的用地址来表示和用地址增量来表示的区别。
用指针的话,还是推荐写最后一种,循环判断条件好写,和不用指针的一样。