- 选择排序
基本思想:依次从数字序列中选取最大的数,其次大的数,并将其与最后,倒数第二位的数字进行交换,直至剩下一个数。
步骤:
1.共有两层循环
2.外层循环是依次对n,n-1,……,1个元素进行排序,记任意一次循环针对的元素数为i。
3.内层循环对i个元素进行,找到最大的元素所在的位置p,然后与最后一个元素进行交换。
伪代码:
算法复杂度:
- 冒泡排序
基本思想:
对数字序列从前往后遍历,每次遇到前面的数字比其后面的数字大时,就将他们交换。这样第一遍后一定会使最大的数字排在最后面。此后重复此过程,这样每一遍都在将一个最大的数字排在后面的同时,也使整个序列更加有序。若某一遍未发现有可交换的数字则终止,否则直至剩下一个数字。
伪代码:
算法复杂度
- 插入排序
基本思想:
对于给定的数字序列从前往后操作。先考虑前两个数字,如果第二个数字小于第一个数字,则将其与第一个数字进行交换,这样这两个数字就是有序的了。接下来暂存第三个数字,并将其与第二个数字进行比较,如果第二个数字小于第三个数字,则第三个数字就是前三个数字里最大的数字,只要将其放回原位置就好,如果第二个数字大于第三个数字,则将其移到3号位置上。再看第一个数字,如果它比第三个数字小,则将第三个数字放在2号位上,这是三个数字就排好了。如果第一个数字大于第三个数字,则将其放在2号位置上,再将第三个数字放在1号位置上,则该种情况下的3个数字就排好了。
这种方法每次考虑一个新加进来的数字时,充分地利用此前已经排序的结果,从而达到提高排序效率的目的。
伪代码:
算法复杂度:
- 堆排序
基本思路:
1、将给定的数组转化成二叉堆,然后将此二叉堆转化成为最大堆(从第一个非叶节点开始,该非叶节点同其左孩子和有孩子之间较大的那个进行交换)。
2、交换堆中的第一个元素和最后一个元素,则新的最后一个元素即是已经排好序的元素。
3、将堆的大小减1,并对第一个元素执行SiftDown操作。
4、继续这一过程,当堆的大小减到1时,即完成了对数组的排序。
伪代码:
算法复杂度: