美文网首页
浅谈排序算法

浅谈排序算法

作者: 印第安老斑鸠_333 | 来源:发表于2019-03-09 22:59 被阅读0次

    1,了解排序算法

    算法目的:

    ①,输入:一组无序的n个数值;②,输出:有序列的n数值

    算法优劣通过什么评判:

    ①,稳定: 如果a=b,a在b前面,排序完成后,a仍在b前面

    ②,不稳定:如果a=b,a在b前面,排序完成后,a跑到了b后面

    ③,内排序:所有排序操作都在内存中完成

    ④,外排序:如果数据太大,会把数据放在磁盘中,通过磁盘和内存的数据传输才能进行排序

    ⑤,时间复杂度: 一个算法执行所耗费的时间

    ⑥,空间复杂度: 运行完一个程序所需内存的大小


    2,罗列八种排序方法思路

    冒泡排序:

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

    ②,对每一对相邻元素作都这样比较,一轮下来最大数就排到了最后的位置

    ③,因为一轮比较只能确定一个最大数,所以要进行多轮比较(不要再次比较已经确定大小的数值),直到排序完成

    选择排序:

    ①,假定第一个数为最小的数,然后依次与后面的数进行比较

    ②,如果找到比它小的,那么就假定新找到的这个数最小

    ③,重复1,2步至找到数列中最小的数,然后把它和最起始位置的数调换位置

    ④,一轮下来只能找到一个最小的数,所以要找多轮(因为每一轮都能确定一个最小的数,所以每下一轮都要忽略这些已经确认的数值,从下一个位置开始作为起点)一直到排序完成

    插入排序:

    ①,从起始第一个数值开始,认定该数值为最小,且已经被排序了

    ②,.取出下一个数值,在已经排序的数值序列中从后向前比较

    ③,如果取出的那个数值比较小,就将比较大的元素移到下一位置,一直找到比取出的数值还要小或者一般大的那个数值,将取出的数值插入其后面

    ④,当取出最后一个数值,并插入完毕后,排序完成

    快速排序:

    ①,从数列中挑出一个数值,称为 "基准"

    ②,剩余的数值都要和基准比较,所有数值比基准值小的摆放在基准前面,所有数值比基准值大的摆在基准的后面(相同的数可以到任一边),这时基准的位置就已经排好了,而且把数列分成了两个区域。分区之间的数值互不比较,因为前面区域的数值一定比基准后面小。

    ③,分区里面的数值继续重复1,2步,直到排序完成。

    堆排序:

    ①,堆排序可以用完全二叉树的形式展示出来,我们以排序最大堆为例

    ②,首先我么从最底层开始比较大小,由于最底层最少有一组分支,所以我们要已每一组分支为单位分别比较大小

    ③,每组分支比较大的那个成员,我们需要把它与它的父级进行比较,如果大于,就与父级交换位置。

    ④,第一层比完了,比第二层,重复第3步,一直到堆顶。

    ⑤,那么好,整个数据结构中最大的那个成员就找到了。

    ⑥,我们知道,完全二叉树可以用数组的方式展示,因为我们要从小到大排序,所以呢,上面步骤结束后堆顶的那个成员就要把它放到数组的最后面,也就是完全二叉树的最下层的最右枝丫上,所以首位与末位交换位置,末位就固定下来了。

    ⑦,进行第二轮比较,在比较之前我们需要忽略掉最末位的那个成员了,因为它最大,所以他的位置固定了,就不带它玩了,

    那么好,重复步骤2~6,直到二叉树消失,排序完成

    计数排序:

    ①,现在有一个数组a,和一个空数组b

    ②,首先将数组a的成员依次放入到数组b中,

    ③,在这个过程中数组a的成员在这个数组b中以下标形式呈现,相对应的键值则代表成员进入的次数

    ④,当所有成员导入完毕,大小的顺序就已经排好了

    ⑤,最后将把它们按顺序导出(如果有多次进入数组b的成员,要全部导出,直到键值为0),即排序完毕

    桶排序:

    ①,现有一个数组a,数组a中有n个数组(桶),每个桶都设置好对应的数据范围

    ②,遍历需要排序的数据,并且把数据一个一个放到对应范围的桶里去

    ③,对每个不是空的桶进行排序(可用其他排序方法)

    ④,从不是空的桶里把排好序的数据拼接起来,排序完毕

    基数排序:

    ①,现有一个数组b,数组b中有十个对象作为桶

    ②,遍历需要进行排序的数据,从每个数值的“最低位开始”对号入桶(数字跑不出0-9的范围,对号如桶就是数组b对应下标的桶)

    ③,按照数组b下标的顺序放出桶中的数据(这个过程中,桶中数据要按照队列顺序依次出来)

    ④,最低位排完就排上一位,一直到最高位。

    相关文章

      网友评论

          本文标题:浅谈排序算法

          本文链接:https://www.haomeiwen.com/subject/ufwepqtx.html