插入排序(直接插入排序,希尔排序)
选择排序(简单交换排序,堆排序)
交换排序(冒泡排序,快速排序)
归并排序
基数排序
//上面的都属于内部排序,何为内部排序呢,只要排序都是在内部完成的就较内部排序,如果内存不能装下这些数据,而且要用到外存,就叫外部排序
插入排序:
57 68 59 52------68>57 不处理
------59跟 57 68 进行比较,找到合适的位置进行插入
57 59 68 52------52 和57 59 68 进行比较,找到合适的位置插入
52 57 59 68 ----最终结果
Shell排序(插入排序的改进算法),其基本思想每一套都按照确定的间隔.使小的元素可以跳跃前进,缩小跳进直至为1
57 68 59 52 73 28 96 33 24 19
间隔用d=n/2=5
57 28 一组其他的类似的
28 57 68 96 33 59
----28 668 33 24 19 57 96 59 52 72
接下来d=d/2(步长一定为整数,第二一定要取基数)3=5/2
依次进行排序
28 68 33 24 19 57 96 59 52 72
最后:d=d/2=1
19 24 28 33 52 57 59 68 72 96 -------最终结果
选择排序:
简单选择排序
57 68 59 52
最小值为52 和第一个交换 52 68 59 57
最小的是 57 和第二个交换 52 57 59 68
最小的为59 不需要交换 完成
堆排序:
什么是堆:n个元素的序列,满足父节点比子节点都要小或比他们都大,就是堆了
1
2 3
4 5 6 7
8 9
上面就是一个最小堆
56 79 56 38 40 84 建立最大堆
我们只需要把它们按照完全二叉树填入
因为 i<=n/2 就是有当父节点的
所以 i最大为第三个 56 和 84 交换
再看 79 和38 40 比较,不用换
再看 56 79 84 比较 和84 交换
84 79 56 38 40 46 再进行依次调整
再把 84---46 进行对调并断开指针 得到 84
再进行重新建立堆 依次类推 直到所有元素都取出来了 就是一个从大到小的堆
到这里,堆排序就完成了
交换排序:
一:冒泡排序算法:
57 68 59 52
--------(倒数第一个元素)52和59进行排序 如果最后一个元素比倒数第二个元素小,交换
57 68 52 59
-------(倒数第二个元素)52和68 ,交换
57 52 68 59
-------------------52和57
52 57 68 59
-------对剩下的3个元素进行冒泡
57 68 59
----------59 和68 交换
57 59 68
----------59和 57 不交换
57 59 68
---68 和59 比较
完成
快速排序的思想:
采用分治法把大问题分解为同类型的小问题
拿出一个元素,把比它大的放一边,小的放另外一边
又用同样的方法,对抓出一个 元素 ,同样的处理
一步步的下去就把每一个小系列的都弄出来的,把结果拼合一下,就成功了
57 68 59 52 72 28 96 33 24 19
--19 68 59 52 72 28 96 33 24 57
---19--68 57 68 59 52 72 28 96 33 24 19
归并排序:
57 68 59 52 72 28 96 33
57 68 52 59 28 72 33 96
接下来是四个四个一起然后有两个指针一个52 57 比较,然后交换
68和59比较然后进行交换
最后把这个系列组成一个更大的系列就形成了我们的答案.
基数排序:
这是一种比较简单的排序方法,因为它的过程比较容易,我们这里就不介绍了
使用合并操作来完成排序的算法
下面是各种算法的复杂读: