一、排序算法

本质上就是按照某种顺序将一组数排好,分多次重复进行,每次只负责把一个数字放到合适的位置上

两种思路:

①先确定一个数字,然后根据数据找合适的位置

②先确定一个位置,根据位置找合适的数字

1、冒泡排序算法(先确定位置,选最前面或者最后面)

假设选择了最后面的位置,就是重复的把最大的数放到最后面,例如:

代码实现:

2、选择排序算法(只能选择最前面最后面的位置)

那选择的位置向前或者向后依次与每一个数做顺序调整,例如:

代码实现:

3、插入排序

先确定数字,假设前面的数已经排序好,把它们和相邻的后面的那个数字作为选定数字,把选定数字向前插入到合适的位置

4、快速排序

在数组中从头部或尾部选择一个数,然后进行排序,比如比它小的在左,比它大的在右,这个数就是枢轴,每次与枢轴进行比较进行顺序调整后的数,我们认为他们的相对位置已经固定,那么这个数就排出在外,不再处理。

排好左右,左右两边分成两部分,在各自选定一个数再次进行这样的排序,注意只能从数组的两头选数,以此类推。

这可以用递归函数来实现

代码实现:

二、查找算法

1、遍历查找

这种查找方式就是遍历所有元素进行查找,是最常见的也最好理解的查找方式,这我们在之前顺序表、链表之类的数据结构中查找已经经常用到,就是依次与所有数字作比较,找到想要的那一个,适合完全没有规律的排列方式

以下两种都适合有规律的数字排列

2、拆半查找

适合数字由大到小或由小到大已经实现排列好了,当我们查找数字时,可以直接与中间数字做对比,这样每次就可以排除剩下一半的数量

假设一组数已经从小到大排列好了,那么我们选取它中间的那个数对比,比它小那么这个数在它左边,比它大这个数在它右边,然后在选取它所在的那一半,继续这样判断。

返回是查找数在数组中的位置

3、分块查找(说一下思想)

索引表 + 源数据表的方式

//索引表
typedef struct
{
int max; //块中最大值
int post;//块的起始位置下标,post数组下标
}index_t; //索引

创建一个结构体数组即可,每个结构体数组根据源数组给定索引表中数据即可

​​​​​​​