在学习完循环,选择分支以及数组之后。今天开始学习对几种排序算法以及二分查找算法,也是对之前学习的内容的一个综合运用。几种排序算法为:选择排序,冒泡排序,插入排序。还有部分一维字符型数组的学习。
1.选择排序。
思想:在合适的位置放置合适的数。
在算法实现中,对这句话的理解是:对于数组中的每个位置,我们都要找到一个适合该位置的数,使得这个数组按照顺序排序。对于一个位置,1:我们需要为这个位置找到合适的数, 2 对于整个数组,我们需要为数组的每一个位置放置合适的数。
1:为某一个位置找到合适的数。以升序排列为例,我们需要为第一个位置找到最小的数。
2 :为数组的每一个位置放置合适的数:依次从剩下的未排序的数中找到最小的数并依次放置给对应的位置。
具体的代码实现如图:
内层循环用于为某一个位置找到合适的数,外层循环用于实现为几个位置找到合适的数。找到最小的数在代码中实现:以当前位置上的数和后面的所有数进行比较,若大于后面的数,则两者交换位置。
2.冒泡排序:
思想:一次冒出一个数(若为升序,则这个数为最大值)
理解:在算法实现中,对数组中的n个数进行n-1次比较找到最大值。对这个比较过程重复n-1次。在找最大值的实现中:从头开始向后与未排序的值进行比较,在比较中,若前面的数大于后面的数,则交换两者的值,直到比较到最后一个未比较的数,此时便将未排序的数中的最大值找到并按顺序放置到后面位置。
代码实现:
注意:外层循环控制冒泡的次数,即n个数需要进行n-1次冒泡。内层循环控制比较的次数,n个数需要进行n-1次比较。注意:i+j = n-1;
3.插入排序
思想:将未排序的数在有序序列中找到合适的位置并插入。
理解:可以将数组的数据分为有序序列和未排序序列(最初的数组中有序序列的数据元素为1)。插入排序是我们需要将未排序的序列数据插入到已经排序的有序序列中。经过n-1次插入,数组数据可以变为一个有序序列。
算法实现如图:
外层循环控制排序的次数,应该为数组的长度。内层循环用于实现寻找合适的插入位置的下标值,然后在该位置插入需要插入的值。
4. 二分查找
前提:数组为有序数组。
思想:找数组中间位置的数,与想找的数进行比较。然后根据比较的结果选择对那一部分进行查找。
理解:每次与有序序列的中间数进行比较,如果大于大于中间数,则在中间数的右边查找;若小于中间数,则在中间数左边查找;若等于中间数,则中间数则为需要查找的数。然后重复上述过程,直到找到这个数或者超出查找范围则结束查找过程。
算法实现如图:
5 一维字符型数组。
1.字符串是当作字符数组来处理的。
2.字符串有一个专门的结束标志‘\0’.
3.处理的是字符串操作的时候,往往以结束标志‘\0’作为操作依据;处理的是字符数组操作的时候,往往以数组长度为操作依据。
4. 字符数组可以用来存储字符串,而字符串在内存中的存储方式也是以字符数组形式存储的。
两个处理字符串的函数:puts();gets().
puts(参数):参数可以为以'\0'结尾的字符数组,也可以为字符串常量。用于向屏幕上输出一个字符串。
gets(char*s):参数可以为数组名。用于从键盘上获取一个字符串。