前言
今天就先不分享OJ题目了,因为最近C语言理论课上深度学习了数组,所以有一些学习感悟与心得与大家分享。
有关数组的基本知识就不多加介绍了,在这里重点分享冒泡排序和多元数组两个部分
一、冒泡排序
1.作用
首先来看代码与运行结果:
#include<stdio.h>
int main(){
int arr[9],i = 0;
while(i<=8){
int a = 0;
scanf("%d",&a);
arr[i] = a;
i++;
}
int j = 0;
for(i=1;i<9;i++) //冒泡排序算法
for(j=0;j<9-i;j++)
if(arr[j]>arr[j+1])
{
int t = 0;
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
i = 0;
while(i<=8){
printf("%d\n",arr[i]);
i++;
}
return 0;
}
通过冒泡排序,可以将数组中的数字进行从小到大(从大到小)的排序
2.原理
这里本来准备以我自己的口吻来描述,但是CSDN上的相关博客介绍太完善了(毕竟是被华为云开发者收录的),还有动画!所以我把链接留在这里。
小明的c++笔记本语言——冒泡排序
冒泡排序最重要的就是下面的两个for循环。
for(i=1;i<9;i++) //冒泡排序算法
for(j=0;j<9-i;j++)
if(arr[j]>arr[j+1])
{
int t = 0;
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
姑且把i++的称为循环1;j++的称为循环2,例如从小到大排,则:
每经过一次循环2,其对象的两个数便会小在左,大在右;
每经历一次循环1,倒数第i个数就一定是大于其左边的所有数;
最终,arr[]便会变成我们想要的样子。
(我的表述可能有些不清晰,可以去上面的链接里看看,有动画演示)
二、N维数组
参考博客:
Half-up:多维数组
Cainv89:多维数组(Multi-dimensional Array)
我的理解
一维数组就像一维坐标系,二维数组就像平面直角坐标系,三维数组则是空间直角坐标系。
一维数组:arr[列数]
二维数组:arr[行数][列数]
三维数组:arr[面数[行数][列数]
定义二维数组时:可省略行而不可省略列
N维数组的应用有很多,但很多都与指针有关。目前我对指针了解较少,将会在以后继续分享
3.补充
查找资料时我也发现了其他众多常用的排序方法,感兴趣的可以了解下六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序