1.稳定排序与不稳定排序:
对于A,B两个键值相等的对象,且在排序前,A在B之前,如果排序后A肯定还在B之前,则为稳定排序,如果B可能在A之前,为不稳定排序。
2.内排序和外排序:
内排序是指在排序期间数据对象全部存放在内存的排序
外排序是指在排序期间数据对象太多,不能同时存放在内存,必须依照排序过程的要求,不断在内外存之间移动的排序。
1.插入排序
基本思想:插入第i个对象时前i-1个对象已经排好了,将第i个对象插入前i-1个对象的合适地方,使得前i个对象有序。是稳定排序,比较次数和移动次数复杂度都为O(n^2)
2.希尔排序
基本思想:将数列以gap作为间隔分成子序列,分别对子序列进行插入排序,再逐步缩小间隔进行插入排序。shell提出gap取floor(n/2),gap=floor(gap/2).这是一种不稳定的排序。
3.起泡排序
基本思想:依次比较key(n)和key(n-1),直到key(2)和key(1),这样会使最小的对象被起泡到第一个,依次进行起泡,完成排序。是稳定排序,比较次数和移动次数复杂度都为O(n^2)
4.快速排序
基本思想:任取一个对象作为基准,按照关键码的大小,将排序队列分为左右两个子序列,小于该对象的都放在左序列,大于该对象的都放在右序列,然后分别对两个子序列重复上述方法,直到所有对象有序排列。是不稳定排序,比较次数和移动次数复杂度都为O(n*logn)
5.选择排序
基本思想:每一趟在后面n-i个待排序对象中选出关键码最小的对象,作为有序对象集的第i个对象。不稳定的排序,比较次数为O(n^2),移动次数为O(n)
6.锦标赛排序
基本思想:利用胜者树来进行选择排序。稳定的排序,比较次数为O(n*logn).
7.堆排序
8.归并排序
9.基数排序
基本思想:利用分配和收集的方法进行排序,比如已知数字不超过100,可以按照十位数先进行分配,再分别进行排序后将数字收集起来。
对于排序算法,可以用下列的方法来生成一系列的随机数进行排序,并用isSorted函数来检验是否正确的排序了。