//冒泡排序的过程(从小到大) 原始数组{3,9,-1,10,-2} 第一轮 1.3,9,-1,10,2 2.3,-1,9,10,2 3.3,-1,9,10,2 4.3,-1,9,-2,10 //第一大的数就移动到最后 第二轮 1.-1,3,9,-2,10 2.-1,3,9,-2,10 3.-1,3,-2,9,10 第三轮 1.-1,3,-2,9,10 2.-1,-2,3,9,10 第四轮 -2,-1,3,9,10
#include<stdio.h> //冒泡排序函数 void bubbleSort(int arr[],int arrLen){ //由于每轮排序几乎同样,所以,可使用for循环处理 int i,j; int t;//临时变量 for(i=0;i<arrLen-1;i++){ for(j=0;j<arrLen-1-i;j++){ //若是前面的数大于后面的数,就交换 if(arr[j]>arr[j+1]){ t=arr[j]; arr[j]=arr[j+1]; arr[j+1]=t; } } } } void main(){ int arr[]={3,9,-1,10,-2,11}; int arrLen=sizeof(arr)/sizeof(int); int j; bubbleSort(arr,arrLen);//数组默认是地址传递 printf("排序后"); for(j=0;j<arrLen;j++){ printf("%d",arr[j]); } getchar(); }
在C中,经常使用的查找有两种算法
#include<stdio.h> int seqSearch(int arr[],int arrLen,int val){ int i; for(i=0;i<arrLen;i++){ if(arr[i]==val){ return i; } } //若是在for循环中,没有执行到return,说明没有找到 return -1; } void main(){ int arr[]={23,1,34,89,101}; int arrLen=sizeof(arr)/sizeof(int); int index=seqSearch(arr,arrLen,-101); if(index != -1){ printf("找到 下标为%d",index); }else{ printf("没有找到"); } getchar(); }
#include<stdio.h> //二分查找 int binarySearch(int arr[],int leftIndex,int rightIndex,int findVAL){ //先找到数组中间这个数midVal int midIndex=(leftIndex+rightIndex)/2; int midVal=arr[midIndex]; //若是leftIndex>rightIndex,说明这个数组都比较过,可是没有找到 if(leftIndex>rightIndex){ return -1; } //若是midVal>findVal说明,应该在midVal的左边查找 if(midVal>findVal){ binarySearch(arr,leftIndex,midIndex-1,findVal); }else if(midVal<findVal){ //若是midVal<findVal说明,应该在midVal的右边查找 binarySearch(arr,midIndex+1,rightIndex,findVal); }else{ return midIndex; } } void main(){ //分析 //好比要查找的数是findVal //1.先找到数组中间这个数midVal,和findVal比较 //2.若是midVal>findVal说明,应该在midVal的左边查找 //3.若是midVal<findVal说明,应该在midVal的右边查找 //4.若是midVal==findVal,说明找到 int arr[]={1,8,10,89,1000,1234}; int arrLen=sizeof(arr)/sizeof(int); int index=binarySearch(arr,0,arrLen-1,-1000); if(index!=-1){ printf("找到index=%d",index); }else{ printf("没有找到"); } getchar(); }
多维数组主要介绍二维数组数组
好比开发一个五子棋游戏,棋盘就是须要二维数组来表示函数
请用二维数组输出以下图形布局
0 0 0 0 0 0code
0 0 1 0 0 0排序
0 2 0 3 0 0游戏
0 0 0 0 0 0内存
语法:类型 数组名[大小 ] [大小]开发
好比:int a[2] [3]get
二维数组在内存的存在形式,各个元素的地址是连续分布的,即在前一个元素基础上加+4
#include<stdio.h> void main(){ //a[4][6];表示一个4行6列的二维数组 int a[4][6];//没有初始化,则是分配的内存垃圾值 int i,j; //所有初始化为0 for(i=0;i<4;i++){ for(j=0;j<6;j++){ a[i][j]=0; } } a[1][2]=1; a[2][1]=2; a[2][3]=3; //输出二维数组 for(i=0;i<4;i++){ for(j=0;j<6;j++){ printf("%d",a[i][j]); } printf("\n"); } //看看二维数组的内存布局 printf("二维数组a的首地址=%p",a); printf("二维数组a[0]的地址=%p",a[0]); printf("二维数组a[0][0]的地址=%p",&a[0][0]); printf("二维数组a[0][1]的地址=%p",&a[0][1]); //将二维数组的各个元素的地址输出 printf("\n"); for(i=0;i<4;i++){ printf("a[%d]的地址=%p",i,a[i]); for(j=0;j<6;j++){ printf("a[%d][%d]的地址=%p",i,j,&a[i][j]); } printf("\n"); } getchar(); }
int arr[3] [2]={{4,6},{1,4},{-2,8}};
遍历该二维数组,并获得和
#include <stdio.h> void main(){ int map[3][3]={{0,0,1},{1,1,1},{1,1,3}}; //遍历 //先获得行 //1.sizeof(map) 获得这个map数组的大小9*4=36 //2.sizeof(map[0])获得map中,第一行有多大3*4=12 int rows=sizeof(map)/sizeof(map[0]); //printf("rows=%d",rows); //获得列 int cols=sizeof(map[0])/sizeof(int); int i,j,sum=0; for(i=0;i<rows;i++){ for(j=0;j<cols;j++){ printf("%d",map[i][j]); sum+=map[i][j]; } printf("\n"); } printf("sum=%d",sum); getchar(); }
#include<stdio.h> void main(){ //分析 //1.建立一个scores[3][5] //2.遍历,给复制 //3.再次遍历,统计总分和平均分 //4.输出 double score[3][5]; int rows=sizeof(score)/sizeof(score[0]),cols=sizeof(score[0])/sizeof(double),i,j; //classTotalScore 各个班级总成绩 totalscore 全部学生成绩 double totalScore=0.0,classTotalScore=0.0; for(i=0;i<rows;i++){ for(j=0;j<rows;j++){ score[i][j]=0.0; } } //遍历,给每一个学生输入成绩 for(i=0;i<rows;i++){ for(j=0;j<cols;j++){ printf("请输入第%d个班的第%d个学生的成绩",i+1,j+1); scanf("%lf",&score[i][j]); } } getchar(); //显示下成绩状况 for(i=0;i<rows;i++){ for(j=0;j<cols;j++){ printf("%.2f",score[i][j]); } printf("\n"); } //统计各个班的总成绩,和全部学生的成绩 for(i=0;i<rows;i++){ classTotalScore=0.0;//每次清零 for(j=0;j<cols;j++){ classTotalScore+=score[i][j];//累计每一个班的总成绩 } printf("第%d个班的平均成绩是%.2f",i+1.classTotalScore/cols); totalScore+=classTotalScore;//将该班的总分,累加到totalScore } printf("全部学生的总成绩是%.2f 平均成绩是%.2f",totalScore,totalScore/(rows*cols)); getchar(); getchar(); }
int main(){ int a[4][5]={{1},{2},{3},{1}}; int i,j; for(i=0;i<4;i++){ for(j=0;j<5;j++){ printf("%d",a[i][j]); } printf("\n"); } getchar(); }
int a[3][3]={1,2,3,4,5,6,7,8,9}; //能够写为 int a[][3]={1,2,3,4,5,6,7,8,9};