冒泡排序:设待排序的序列中元素个数为n,首先比较最后两个元素,如果逆序则交换,否则继续比较前两个。

插入排序:每一步将待排序的元素,插入到前面拍好序的适当的位置上去,直到元素全部插入为止。
直接插入排序:当第i个元素时,前面的i-1个已经排好序,这时,把i插入到前面合适的位置,其后面的元素后移。总的比较次数和元素比较次数都是n(n-1) /2;
折半插入排序:一个顺序表中有一个序列,其中0到i-1是已经排好序的元素,则在i插入时,利用折半查找法寻找插入位置。

希尔排序:设计一个步长序列,在排序时,反向使用步长序列。设待排序的n个元素,取一个整数步长h<n作为间隔,将全部元素分为h个子序列,将所有距离为h的元素放入同一个序列,在每一个子序列中分别施行插入排序,然后减小间隔,直到h为1,将所有元素放在同一个序列中排序为止。
直接选择排序:
1) 在一组元素a[i]~a[n-1]中选择具有最小关键字的元素。
2)若不是这组元素中的第一个元素,则将它与这组元素中的第一个元素交换。
3)在这组元素中,剔除最小的元素,在剩下的a[i+1]~a[n-1]中重复执行1,2步,直到剩余元素只有一个为止。

快速排序:基于一种分治策略,其思路是取待排序的元素中的某个元素作为划分元素,按照该划分元素的关键字,将整个序列分为左右两个子序列,左侧的子序列中所以元素都小于或等于划分元素的关键字,右侧子序列元素都大于划分元素的关键字,两个子序列使用同样的方法划分,直到所有元素排序完成为止。

归并排序:
二路归并:将两个有序的序列合并成一个新的有序序列。

自底向上:从一个,两个排序,两组排序,等等。

自顶向下:把一个分成两段,然后再不断的往下分,最后分到1个,在回退成一组。

堆排序:第一,构造堆,插入构造,并不断调整。
第二种方法,将数据元素放入数组中,并将数组视为一棵尚未满足堆性质的完全二叉树,从右往左,反向层次遍历二叉树的所有非叶子节点,并对从小到大的各棵子树通过筛选运算使之成为堆。
