C语言学习复盘整理笔记(七)

第七周:数组运算

C语言学习笔记

本系列笔记是学习复盘慕课上浙江大学 翁恺老师《程序设计入门-C语言》课程的笔记和一些自己的总结。(文章的部分截图来自课程视频截图)

课程链接:https://www.icourse163.org/learn/ZJU-199001?tid=1206771253#/learn/content

7.1数组运算

7.1.1数组运算

数组在搜索中被广泛应用。而搜索又是现在非常重要的一个应用。

  1. 数组的集成初始化:

我们将得到数组的a[0]=2,其他的12个数字自动填零。

  1. 所以,如果我们想将一个数组全部初始化为0,我们其实可以不用循环去做到,直接

Cntnumber={0};就会全部初始化为0 

C语言学习复盘整理笔记(七)_第1张图片

  1. 集成初始化时的定位

EG2:  Int a[10]={ [0]=2, [2]=3,6,};

是给a0】赋值了2;给a2】赋值了3;给a3】赋值了6,其余的补充为0.

  1. n在初始化数据中给出定位
  2. 没有定位的数据接在前面的位置后面
  3. 其他位置的值补零
  4. 也可以不给出数组大小,让编译器算
  5. 特别适合初始化数据稀疏的数组
  1. 如何得到数组的大小?

Sizeof得到的数组占据多少个字节。

%lu 用来显示sizeof之后的结果

 Sizeof(a)/sizeof(a[0])得到的是数组占据的元素

好处:一旦修改数组中初始的数据,不需要修改遍历的代码。

  2. 数组的赋值

不可以 int b【】=a

数组变量本身不能被赋值;要把一个数组的所有元素交给另一个数组,必须采用遍历。

这是唯一可以把一个数组赋给另一个数组的方法,没有别的办法。

 3.数组传入函数

  1. 数组作为函数的参数时,我们不能在【】中给出数组的大小,只能写a[];(如下面截图所示)
  2. 不能在函数内部利用sizeof来计算数组的元素个数
  3. 我们往往需要用另一个参数在主函数中计算好数组的大小,将它传入函数。(如下图中的length)

C语言学习复盘整理笔记(七)_第2张图片

7.1.2数组例子:如何判断一个数是不是素数并且建立素数表?三种方式。

方法一:

方法二:只需要测试比x小的素数,它能不能整除;利用数组建立素数表

C语言学习复盘整理笔记(七)_第3张图片

C语言学习复盘整理笔记(七)_第4张图片

方法三:构造素数表

C语言学习复盘整理笔记(七)_第5张图片

伪代码:

C语言学习复盘整理笔记(七)_第6张图片

C语言学习复盘整理笔记(七)_第7张图片

 

关于下标是否越界的两个小问题:

  1. C语言学习复盘整理笔记(七)_第8张图片
  2. C语言学习复盘整理笔记(七)_第9张图片
  3.  

7.2搜索

7.2.1线性搜索

很重要!!!

基本方法:遍历(也就是叫线性搜索)

C语言学习复盘整理笔记(七)_第10张图片

7.2.2搜索的例子

一种数据结构:散列表 hash table

C语言学习复盘整理笔记(七)_第11张图片

C语言学习复盘整理笔记(七)_第12张图片

构造两个数组,我们在第一个数组中用一个值10得到下标是2,再用这个下标去第二个数组中得到我们想要的结果也就是:dime

C语言学习复盘整理笔记(七)_第13张图片

割裂的数组有什么问题?

这种程序的结构对于Cache 不友好。

我们希望把面额和名字放在一起。

C语言学习复盘整理笔记(七)_第14张图片

7.2.3二分搜索

线性搜索最大的问题是它的效率问题。

二分搜索的前提:排好序

C语言学习复盘整理笔记(七)_第15张图片

 

二分搜索最大的好处是:效率。 次数: log2N

1000个东西 log21000=10

 

7.3排序初步

7.3.1选择排序

如果数据是无序的怎么办?

用选择排序的算法来对它进行排序。

C语言学习复盘整理笔记(七)_第16张图片

第一步:找出最大

第二步:交换 swap a[maxid] a[len-1]

选择排序是用来将无序的数组变为有序的数组。

C语言学习复盘整理笔记(七)_第17张图片

你可能感兴趣的:(C,语言学习)