BSPd12(数组、冒泡排序算法)

冒泡排序

冒泡排序(Bubble Sort)是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来

说并没有什么太大作用。

1. 算法步骤

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2、编程实现

 怎样定义一维数组

一维数组,是由数字组成的以单纯的排序结构排列的结构单一的数组,是计算机程序中最基本的数组。 二维及多维数组可以看作是一维数组的多次叠加产生的。

一般形式: 类型说明符 数组名[常量表达式]
eg: int a[10];

怎样初始化一维数组

定义数组时,对元素赋初值
* 对全部元素赋值 eg : int a[10]={0,1,2,3,4,5,6,7,8,9}; 这时[ ]中的10可以不写。
* 对部分元素赋值 eg: int a[10]={0,1,2,3,4};系统自动给后5个元素赋初值为0。
* 若想将数组元素全部赋值为0,可以对全部元素赋值,也可int a[10]={0};还可直接写空的大括号,如:int a[10]={};。
* 在指定数组长度并初始化时,未被初始化的元素,如果是字符型数组,初始化为’\0’,如果是指针型数组,初始化为NULL,即空指针。

定义数组后,对元素赋初值
* int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9};
*int a[10]; a[10]={0};
int a[10]; a[10]={0,1,2,3,4,5,6,7,8,};(其余用零补齐)

变量类型及存储地址讲解

1)        计算机会给数组分配一块连续的存储空间

2)        数组名代表数组的首地址,从首地址位置,依次存入数组的元素。

3)        每个元素占用相同的字节数[字节数取决于数组类型]

4)        数组的每个元素之间的地址连续。

数组越界

所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一。

在 C 语言中,数组必须是静态的。换而言之,数组的大小必须在程序运行前就确定下来。由于 C 语言并不具有类似 Java 等语言中现有的静态分析工具的功能,可以对程序中数组下标取值范围进行严格检查,一旦发现数组上溢或下溢,都会因抛出异常而终止程序。也就是说,C 语言并不检验数组边界,数组的两端都有可能越界,从而使其他变量的数据甚至程序代码被破坏。

因此,数组下标的取值范围只能预先推断一个值来确定数组的维数,而检验数组的边界是程序员的职责。

数组名用途

1、可以利用sizeof(数组名)获取整个数组占据空间内存大小;

2、可以计算数组元素个数;

3、可以利用数组名,获得数组首地址;

4、数组名是常量,不可修改。

宏定义

在C 语言中,可以采用命令#define 来定义宏。 该命令允许把一个名称指定成任何所需的文本,例如一个常量值或者一条语句。 在定义了宏之后,无论宏名称出现在源代码的何处,预处理器都会把它用定义时指定的文本替换掉。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值