紧张的备考时期内翻到了之前总结的十大排序知识,学算法排序当然是不能错过的,话不多说直接步入正题。(建议大家第一要手敲代码,不要直接复制否则很难掌握,博主就是忘了好几次了)
十大排序:
冒泡排序,选择排序,插入排序,快速排序,堆排序,归并排序,希尔排序,计数排序,桶排序,基数排序。
1:冒泡排序
冒泡法排序是C语言中较简单的 排序算法 的 。
定义:它重复地走访过要排序的元素列,依次比较两个相邻的元素,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾。如此反复,直到没有可以交换的元素,(即从小到大排序好)。
思路:
有n个数,每轮替换一个数,假设最大的数在第一个,则一共需要替换n-1轮;此时最大数已经在最下面,所以第二轮替换少一轮,以此类推;
2:选择排序
3:插入排序
从第二个元素开始,向前在已经排序的序列中扫描,如果前一个大于要排序的元素,则把前一个移动到后一个位置,将要排序的元素继续向前扫描;
4:希尔排序:
可以先定义整型gap 将数列总个数赋值给gap
然后每次 将gap除以二;也就是将数列分组
然后将所有距离为gap的元素分为一组
对每一组元素进行插入排序 然后重复
当gap为1时进行插入排序
5:归并排序
主要思路:
通过不断比较两组序列的头部大小 将两组序列重新排序组合成为一个排序好的序列
6:快速排序
第一次完成之后 4 7 5 组成一个新的序列 12 9 组成一个新的序列 之后再对左右新序列进行多次的快速排序后得到一个新的排序后的序列
7:堆排序
大(小)顶堆:降(升)序排列
先将数列构成一个随机的二叉数,之后从倒数第二层的数开始扫描,判断其节点与顶堆的大小关系,将最大的放到上方;以此类推 从倒数第二层开始一直到最高层,一轮结束后将堆顶数取出,把最后一层的末位数放在堆顶位置,然后再次进行,不断构成大顶堆,不断重复到所有数字都取出结束
8: 计数排序
先找出序列中最大和最小数 两个数的差 为数组的大小 然后记录每个数出现的次数 存入新数列 a[]中 然后 反向释放数列 每次减一即可(每个数所在位置为 该数减去最小值)
9:桶排序
基本思路
将全体序列分为几个范围用桶来放置 然后在单独的桶内进行排序 最后按照桶的顺序释放即可
利用二维数组来放置较为简单
10: 基数排序
基数排序是根据数位来进行排序的.他是从个位开始,然后按照每一位的数进行排序