数组的三个算法:
1;冒泡排序法
两个for循环,一个是循环次数,一个是排序交换位置
int a[5]={1,4,5,7,2};
for(int i=0;i<5;i++){ //循环次数
for(int j=1;j<5;j++){ //排序比较
if(a[j]<a[j-1]){
a[j]=a[j]+a[j-1];
a[j-1]=a[j]-a[j-1]; //交换位置
a[j]=a[j]-a[j-1];
}
}
}
for(int i=0;i<5;i++){
printf("%d",a[i]); //依次打印
}
2:快速查找最小数,最大数的
#include<stdio.h>
void main(){
int a[5]={2,6,7,1,0};
int min=a[0];
int i;
for( i=1;i<5;i++){
if(a[i]<min){
min=a[i];
}
}
printf("%d",min);
getchar();
}
一维数组的定义方式
类型 变量名[大小]={};
扩展到二维数组到多维数组
内存中的描述:有N个大小数据类型为一样的数据连续存储
初始化
赋初值
取值关键:下标取值
二维数组
定义格式 int[1][2]={}; 第一个1是行数 2是列数
行数从0开始数 ,列数也从0开始;
一维数组和二维数组联系
二维数组里面的每一个元素又是一个数组
2是数组个数 3是元素个数
a[0][0]=1 a[0][1]=2 a[0][2]=3
二维数组初始化特殊地方 以一维数组的方式进行初始化 如果没有赋值,采取和一维数组相同的数据类型默认形式。
int a[2][3]={{1,2,3},{4,5,6}}
赋初值第二种方式 int[2][3]={1,2,3,4,5,6}
错误命名int a[][]={};
可以这样命名 int a[][3]={{1,2,3},{4,5,6},{7,8,9}};
总结就是行数可以填也可不填 ,列数一定要填,
结合一维数组的初始化 int a[]={0};
也有边界问题,超过范围则会奔溃
单个数据的赋值定义:定位
最大数据的是当前定义的数据的n-1, m-1;
计算矩阵对角线上的元素和
#include<stdio.h>
void main(){
int i,j,sum=0;
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
for(i=0;i<3;i++){
for(j=0;j<4;j++){
if(i==j){
sum+=a[i][j];
}
}
}
printf("%d",sum);
getchar();
}
//找出二维数组中的最小值
#include<stdio.h>
void main(){
int i,j;
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int min=a[0][0];
for(i=0;i<3;i++){
for(j=0;j<4;j++){
if(a[i][j]<min){
min=a[i][j];
}
}
}
printf("%d",min);
getchar();
}
前提是数组的排序是从小到大排序
3:二分查找(可以不掌握,需要了解)(通过下标取值,取的最小值和最大值,最小下标和最大下标的中间值,还有一个自己想要查找的值)
int Search(参数a,sizeof(a)/sizeof(int),key){ //程序最后要返回一个值
中间下标mid 自己想要查找的值key
判断a[mid]与key值的大小
如果相等,那就返回a[mid]
如果key>a[mid] 最小下标start加1 mid=start+1
如果key<a[mid] 最小下标end减1 mid=end-1
}
void main(){ //程序最后不要返回值,因为void是空类型
int a[5]={0,3,5,6,8}
Search(a,sizeof(a)/sizeof(int),key ) //传递数组和数组长度还有自己想要查找的值
}
具体的函数例子我试着写了,还没调试对就先不发,我还没怎么搞清楚这个东西