在经典堆排序算法中直接用fixDown操作。for循环构造堆,然后while循环把最大元素和最末尾的元素互换并且修复堆,直到堆为空为止。 堆排序比快速排序慢,但比归并排序快,而且不需要额外的储存空间,且运行时间对输入并不是特别敏感。 1 template <class Item> 2 void he ...
分类:
编程语言 时间:
2020-04-22 23:00:39
阅读次数:
110
1交换排序 1.1交换排序 冒泡排序(从前向后冒泡) 1.2交换排序 选择排序(选择排序第i个位置的元素跟后面的其他元素比较,找到比第i个元素小且最小的元素,与它进行交换) 2插入排序 2.1直接插入排序(带有标志位的) 2.2直接插入排序(不带有标志位) 2.3希尔排序 2.4归并排序 "参考博文 ...
分类:
编程语言 时间:
2020-04-21 13:22:09
阅读次数:
68
插入排序 直接插入排序,折半插入排序,2-路插入排序,希尔排序 快速排序 冒泡排序,快速排序(冒泡排序改进), 选择排序 简单选择排序,树形选择排序,堆排序 归并排序 基数排序 ...
分类:
编程语言 时间:
2020-04-20 13:41:41
阅读次数:
63
1 void mergeSort(int array[], int begin, int end) { 2 if (begin >= end) { 3 //数组长度若为1,则有序 4 return; 5 } 6 else { 7 //若长度大于1,则再进行归并排序 8 int middle = (b ...
分类:
编程语言 时间:
2020-04-18 15:59:31
阅读次数:
79
归并排序 归并排序是一种分治策略的排序算法。它是一种比较特殊的排序算法,通过递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列。 归并排序首先由著名的现代计算机之父 在`1945 EDVAC`(一台美国早期电子计算机),足足用墨水写了 23 页的排序程序。注:冯·诺依曼(John ...
分类:
编程语言 时间:
2020-04-18 14:12:29
阅读次数:
67
简述 归并排序与基于交换、选择等排序的思想不一样,“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。 算法思想 假定序列有n个记录,则可以将其看成是n个有序子序列,每个子序列的长度为1,然后两两合并,得到$\lceil n/2 \rceil$个长度为2或1的有序序列;再两两归并,···· ...
分类:
编程语言 时间:
2020-04-17 21:49:48
阅读次数:
69
归并排序(MERGE SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide and conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解, 而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 简而言之、就是将一个整体得 ...
分类:
编程语言 时间:
2020-04-16 19:29:42
阅读次数:
66
排序 交换、插入、选择、归并 稳定:a在b前,a = b,排序后,a仍在b前。 不稳定:a在b前,a=b,排序后,a可能在b后。 交换排序 冒泡 稳定——平均O(n^2),最好O(n),最坏O(n^2) 快排 不稳定——平均O(NlogN),最好O(NlogN),最坏O(N^2) 冒泡排序 pack ...
分类:
编程语言 时间:
2020-04-16 14:55:02
阅读次数:
52
线性表(即线性数据结构,如数组和链表)的常规排序算法,包括冒泡、插入、选择、归并和快排,其中综合性能最好的就是快排(快速排序),所以快排在工程实践中也有大量的应用,比如很多编程语言都提供了排序函数,而这些排序函数基本都是基于快速排序实现的,比如 PHP 的数组排序函数 sort 就是如此。 今天我们 ...
分类:
编程语言 时间:
2020-04-15 21:45:27
阅读次数:
164
归并排序 实现原理 所谓归并排序,指的是如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。 归并排序使用了分治思想,分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。说到这里,可能你就能联想起我们之前 ...
分类:
编程语言 时间:
2020-04-15 21:38:58
阅读次数:
78