//冒泡排序的过程(从小到大)
原始数组{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 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0
语法:类型 数组名[大小 ] [大小]
比如:int a[2] [3]
二维数组在内存的存在形式,各个元素的地址是连续分布的,即在前一个元素基础上加+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};
原文:https://www.cnblogs.com/mx-info/p/14383284.html