计算机根据二维数组的大小,分配一段连续的内存空间,二维数组个元素按行逐列顺序存储
二维数组example[2][2]的存储情况
对N个整数进行升序排序,并输出排序结果
冒泡排序:以升序为例,对n个给定数据进行排序
第1趟:从0下标开始,依次比较相邻的两个数据,逆序则交换,最终将最大值放入下标n-1处。
第2趟:从下标开始,依次比较相邻的两个数据,逆序则交换,最终将次大值放入下标n-2处。
......
第i趟:从0下标开始,依次比较相邻的两个数据,逆序则交换,最终将第i大值放入下标n-i处
.......
第n-1趟:从0下标开始,比较前两个数据,逆序则交换,最终将最小值放入下标0处。
#include<stdio.h>
#define N 10
int main(){
int a[N],i,j,t;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=1;i<N;i++)
for(j=0;j<N-i;j++)
if(a[j]>a[j+1])
t=a[j],a[j]=a[j+1],a[j+1]=t;
for(i=0;i<N;i++)
printf("%8d",a[i]);
}
思路就是:
0-8
1-7
2-6
3-5
4-4
5-3
6-2
7-1
8-0
就这么着,我们就升序了。
显示结果是:
//手写代码试试
#include<stdio.h>
#define N 10
int main(){
int i,j,t,a[N];
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=1;i<N-1)
for(j=0;j<N-i;j++)
t=a[i],a[i]=a[i+1],a[i+1]=t;
for(i=0;i<N;i++)
printf("%8d",a[i]);
}
//数组应用实例:查找
一维数组存储的升序数列中,使用折半查找法查找给定值x
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11] a[12] a[13] a[14]
#include<stdio.h>
#define N 15
int main(){
int a[N]={3,6,7,8,21,23,36,38,67,69,80,82,85,88,96};
int x,top=0,bot=N-1,mid=0;
scanf("%d",&x);
while (top<=bot) {
mid=(top+bot)/2;
if(a[mid]==x)break;
else if(a[mid]<x) top=mid+1;
else bot=mid-1;
}
if(bot<top) printf("%d:no found.\n",x);
else printf("Success! a[%d] is %d.\n",mid,x);
}
输入38就是这么个情况
手写一下程序
#include<stdio.h>
#define N 15
int main(){
int top=0,bot=N-1,mid=0,x;
while(top<=bot){
mid=(top+bot)/2;
if(a[mid]==x) break;
else if(a[mid]<x) top=mid+1;
else bot=bot-1;
}
if(bot<top) printf("this is no found.\n");
else printf("this number is a[%d]=%d.\n",a[i],x);
}