常用排序算法及优化总结
本专栏包括基本排序算法中的直接插入排序、高级排序中的归并排序、快速排序和堆排序及其优化过程。
SL_World
中国科学院大学计算机应用技术专业在读研究生
展开
-
直接插入排序
引言:直接插入排序时间复杂度是O(n²),其算法思想很简单,即每步将一个待排序的记录,按其排序码的大小,插到前面已经排序的文件中的适当位置,直到全部插入完为止。具体过程如下图(动图源于网络): 直接插入排序代码如下:private static void insertSort(int[] a,int l,int r){ if(l>=r) return; for(int i原创 2018-01-22 18:50:20 · 314 阅读 · 0 评论 -
堆排序及其优化过程总结
引言:众所周知,堆排序算法是高级排序算法中的一种,平均时间复杂度为O(nlogn),算法思想是:先把带排序的记录构造成堆,然后通过从堆中不断选取最小/大元素,从而达到排序的目的。本文将以最大堆为例从三个点依次讨论堆排序的优化,即从基础堆排序到heapify、再到原地堆排序讨论。以下共有三个堆排序算法(heapSort1、heapSort2、heapSort3)依次由浅入深讨论。(动图源于网络)原创 2018-01-22 18:04:57 · 2315 阅读 · 0 评论 -
递归与分治策略-2.7归并排序及其优化总结
引言:众所周知,归并排序(合并排序)算法是基于分治策略的一个排序算法,其基本思想是:将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排序好的子集合合并成为所要求的排好序的集合。具体过程如下图所示(动图源于网络): 如图所示:归并排序需要三个索引分别是i,j,k。其中i指向带排序第一个子集合待比较元素,j指向待排序另一个子集合待比较元素,k指向数组b中的元素。原创 2017-10-07 23:02:26 · 864 阅读 · 0 评论 -
递归与分治策略-2.8快速排序
快速排序的优化过程可以参考我的另一篇博文:《快速排序及其优化过程总结》 快排示意图:/** * 快速排序 */public class test2_8 { static Comparable a[] = {"49","38","65","97","76","13","27"}; private static void qSort(int left,int righ原创 2017-10-11 19:19:59 · 535 阅读 · 0 评论