数据结构:
排序算法总结:
内部排序:整个排序过程完全在内存中进行,成为内部排序;
外部排序:另一类排序时由于待排序的数据量太大,内存无法容纳全部数据,排序需要借助外部存储设备才能完成,成为外部排序
排序算法:
插入类排序:
1、直接插入排序
具体过程为:将第i个记录的关键字k,依次与其前面记录的关键字k(i-1),k(i-2),...,k(1)进行比较,将所有关键字大于k(i)的记录依次向后移动一个位置,直到遇见一个小于或者等于他的数此时k(i)后面必定为空位置,将第i个记录插入到空位置即可。
折半插入排序
对于有序表进行折半查找,其性能优于顺序查找。所以,可以将折半查找思想用于在有序记录r[1..i-1]中确定应插入位置,相应的排序算法称为折半插入排序法。
希尔排序
希尔排序算法思想香江待排序的记录序列分割成若干个“较稀疏”的子序列,分别进行直接插入排序。经过上述粗略调整,整个序列中的记录已经基本有序,最后再对全部记录进行一次直接插入排序。
2、交换类排序:
冒泡排序法:
冒泡排序算法的最坏情况是待排序记录按关键字逆序排列,此时,第i趟冒泡排序需进行n-i次比较,3(n-i)次移动。经过n-1趟排序后,总的比较次数为n(n-1)/2。
快速排序:
从待排序记录序列中选取一个记录(通常选取第一个记录)为枢纽,其关键字设为k,然后将其与关键字小于k1的记录一到前面
,而将关键字大于或者等于k1的记录移到后面,结果将待排序记录序列分成两个子表,最后将关键字为k1的记录插入分解线的位置处。整个过程叫做快速排序。
3、选择类排序
简单选择排序:
第一趟简单排序时,从第一个记录开始,通过n-1次关键字比较,从n个记录中选出关键字最小的记录,并且和第一个记录进行交换;
第二趟简单排序时,从第二个记录开始,通过n-2次关键字比较,从n-1个记录中选出关键字最小的记录,并且和第二个记录进行交换;
第三趟简单排序时,从第三个记录开始,通过n-3次关键字比较,从n-2个记录中选出关键字最小的记录,并且和第三个记录进行交换;
...
树形选择排序:
树形选择排序也称作锦标赛排序,基本思想就是先把待排序的n个记录的关键字两两进行比较,取出较小者,然后再在【n/2】个较小者中,采用同样的方法进行比较,选出每两个中的较小者,如此反复,直至选出最小关键字记录为止。
堆排序:
把待排序的记录的关键字存放在数组中r[1..n]之中,将r看成是一颗完全二叉树的顺序表示,每个节点表示一个记录,第一个记录r[1]作为二叉树的根,以下各记录r[2]~r[n]依次逐层从左到右顺序排列,任意节点r[i]的做孩子是r[2i],右孩子r[2i+1],双亲是r[i/2],对这颗完全二叉树进行调整堆栈。
排序算法可以分情况使用,如果数据量较小简单排序我们可以选择冒泡或者快速排序,对于数据量大的且为有序的可以选择