一、排序的几种方法:
1、冒泡排序
#include<stdio.h> int main() { int a[10],i,j,t; for(i=0; i<10; i++) scanf("%d",&a[i]); printf("\n"); for(j=0; j<9; j++) for(i=0; i<9-j; i++) if(a[i]<a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } for(i=0; i<10; i++) printf("%d ",a[i]); printf("\n"); return 0; }
2、选择排序
#include<stdio.h> int main() { void sort(int x[],int n); int a[10],i; for(i=0; i<10; i++) scanf("%d",&a[i]); sort(a,10); for(i=0; i<10; i++) printf("%d ",a[i]); printf("\n"); return 0; } void sort(int a[],int n) { int i,j,k,t; for(i=0; i<n-1; i++) { k=i; for(j=i+1; j<n; j++) if(a[j]>a[k]) k=j; t=a[k]; a[k]=a[i]; a[i]=t; } }
3、用指针方法排序
1 #include<stdio.h> 2 int main() 3 { void sort(int x[],int n); 4 int i,*p,a[10]; 5 p=a; 6 for(i=0; i<10; i++) 7 scanf("%d",p++); 8 sort(p,10); 9 for(i=0; i<10; i++) 10 { printf("%d ",*p); 11 p++; 12 } 13 printf("\n"); 14 return 0; 15 } 16 void sort(int *x,int n) 17 { int i,j,k,t; 18 for(i=0; i<n-1; i++) 19 { k=i; 20 for(j=i+1; j<n; j++) 21 if(*(x+j)>*(x+k)) 22 k=j; 23 if(k!=i) 24 { t=*(x+i); 25 *(x+i)=*(x+k); 26 *(x+k)=t; 27 } 28 } 29 }
运行结果出错
错因:第7行代码p++应改为p+i,这样p的值就不会改变。否则要在第7行后加p=a,使p重新指会a的首地址。
二、多维数组元素的地址
a[i][j] <=> *(*(a+i)+j) <=> *(a[i]+j) 代表元素a[i][j]的值
a[i]+j <=> *(a+i)+j <=> &a[i][j] 代表a[i][j]的地址
用指针打印二维数组
#include<stdio.h> int main() { int a[3][4]= {1,2,3,4,5,6,7,8,9,10,11,12}; int *p; p=a; for(; p<a[0]+12; p++) { if((p-a[0])%4==0) printf("\n"); printf("%4d",*p); } printf("\n"); return 0; }
三、通过指针引用字符串
#include<stdio.h> int main() { char a[]="I love China",b[20]; int i; for(i=0; *(a+i)!='\0'; i++) *(b+i)=*(a+i); *(b+i)='\0'; printf("%s\n",b); return 0; }