数据结构:七大经典、比较类的排序算法思路 |
您所在的位置:网站首页 › 数据结构排序有哪些类型 › 数据结构:七大经典、比较类的排序算法思路 |
排序算法根据数据是否存在内存中进行排序,划分为内部排序和外部排序。 而常见的内部排序算法有十种,又可根据是否需要进行元素的比较,划分为比较类排序和非比较类排序。 玩扑克牌时最常用的就是简单插入排序 插入排序:插入排序基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。 插入排序的基本思想是:每次将一个待排序的数据,按其关键码值的大小插入前面已经排序的数据中的适当位置上,直到全部插入完为止。 单趟插入排序(升序)示例: 插入排序(升序)动图演示如下: 复杂度 时间复杂度 最坏时间复杂度:O(n^2), 逆序为最坏情况。最好时间复杂度:O(n) , 接近有序为最好情况。空间复杂度 O(1), 并没有借助额外的空间。 希尔排序希尔排序又可称为“缩小增量排序”,它优化了简单插入排序。 根据上面对简单插入排序的探讨,当序列接近有序时,时间复杂度可达到O(n). 希尔排序的思想:首先使得整个序列接近有序后,最后在使用简单插入排序。为了使得整个序列接近有序采用了分组预排序的方法,取某个固定距离的数据为一组进行分组。
以上面的例子进行测试,答案一致。 【优化】 上面的思路,我们采用的一次分组预排序是:每组各自进行排序,一组排好序之后再排下一组”。其实我们还可以采用:每组交替进行一次插入排序,直到达到目的,可以理解为“一锅炖”。 //希尔排序,版本二 void ShellSort_Two(int* arr, int n) { int i = 0; int gap = n; while (gap > 1) { gap /= 2; for (i = 0; i = 0) { if (arr[end] > x) { arr[end + gap] = arr[end]; end -= gap; } else { break; } } arr[end + gap] = x; } } } 选择排序 简单选择排序【简述】 选择排序的思想:先以第一个数为参照数,在后面剩下的序列中选出比它小并且是剩下的序列中最小的数,将这个数与参照数的位置交换。此时属于第一个位置的数已经排好,剩下的数依次按照这个方法进行直到达到排序的目标。 【动图如下】 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |