举些数组中经常用到的应用小例子:
目录
-
数据排序(冒泡法n2、选择法n2)
// 冒泡法排序
void test02_2() {
int a[10]={12,32,23,123,231,3214,4324,2312,12,342};
int i,j,temp;
for(i=0;i<9;i++)
{ for(j=i+1;j<10;j++)
if(a[j]<a[i]) temp=a[i], a[i]=a[j], a[j]=temp;
}
for(i=0;i<10;i++) printf("%9d",a[i]);
}
// 选择法排序
void test02() {
int a[10]={12,32,23,123,231,3214,4324,2312,12,342};
int i,j,temp;
for(i=0;i<10;i++)
{ for(j=i;j<9;j++)
if(a[j]>a[j+1]) temp=a[j+1], a[j+1]=a[j], a[j]=temp;
}
for(i=0;i<10;i++) printf("%9d",a[i]);
}
-
插入法数据排序(直插法nlog2、希尔法(待处理))
// 直插法排序
void test04() {
int a[10]={333,67,2625,23,1};
int number;
int i,j,temp1,temp2;
printf("Insert data: ");
scanf("%d",&number);
for(i=0;i<10;i++)
{ if((a[i+1]<=number && a[i]>=number)||(a[i]<=number && a[i+1]>=number))
{ temp1=a[i+1], a[i+1]=number;
for(j=i+2;j<10;j++)
temp2=a[j], a[j]=temp1, temp1=temp2;
break;
}
}
for(i=0;i<10;i++) printf("%9d",a[i]);
}
// 希尔法排序
-
杨辉三角
void test06() {
int a[10][10];
int i, j, n;
for(i=0;i<10;i++) a[i][0]=1, a[i][i]=1;
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j] = a[i-1][j-1] + a[i-1][j];
for(i=0;i<10;i++)
{ for(j=0;j<i+1;j++) printf("%9d",a[i][j]);
printf("\n");
}
}
-
魔方阵(需考虑三处:最低层+最左层+正对角线正上方)
void test07() {
int a[17][17];
int i, j, k, n;
printf("input n(1~17):\n");
scanf("%d",&n);
for(i=1; i<=n; i++) for(j=1; j<=n; j++) a[i][j]=0;
i=1,j=n/2+1;
a[i][j]=1;
for(k=2;k<=n*n;k++)
{ i=i-1, j=j+1;
if(i<1 && j>n) i=i+2, j=j-1;
else
{ if(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else i=i+2, j=j-1, a[i][j]=k;
}
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++) printf("%4d",a[i][j]);
printf("\n");
}
}
-
折半查找法查找出某数是数组中的第几个元素
void test09() {
int a[N]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
int number;
int flag;
int start=0,mid=N/2,end=N;
printf("Input the data:\n");
scanf("%d",&number);
if(number<a[0] || number>a[N-1]) printf("Cannot find !");
else
{ while(a[mid]!=number)
{ if(end>start)
{ mid = (start+end)/2;
if(a[mid]>number) end = mid;
if(a[mid]<number) start = mid;
flag = 1;
}
else
{ printf("Cannot find !");
flag = 0;
break;
}
}
if(flag) printf("number=a[%d],%d",mid,a[mid]);
}
}