用归并排序算法对序列1,2,6,4,5,3,8,7进行排序,共需要进行()次比较
排序三次
归并排序的方法就是分组排序
假设序列是5,3,7,2,1,4,6
第一次排序每组为2个元素,即分为4组(7/2取上整等于4),分别为【5,3】、【7,2】、【1,4】、【6】,对每一组进行排序;
第一次排序后序列是3,5,2,7,1,4,6
第二次排序每组为4个元素,即分为2组(7/2/2取上整,实际上是第一次分的4组两两合并,即4/2取上整等于2),分别为【3,5,2,7】、【1,4,6】
第二次排序后序列是2,3,5,7,1,4,6
第三次排序每组为8个元素,即只有1组,排序完后就是1,2,3,4,5,6,7了
归并排序第N次排序每组为2^N个,假设有S个元素,一共需要排序Y次,那么最后一次排序每组就是2^Y个,令2^Y>=S,答案很容易就知道了
1、插入排序(直接插入排序和希尔排序)
2、选择排序(直接选择排序和堆排序)
3、交换排序(冒泡排序和快速排序)
4、归并排序
5、基数排序
直接插入排序:逐个将后一个数加到前面的排好的序中。在直接插入排序过程中,对其中一个记录的插入排序称为一次排序;直接插入排序是从第二个记录开始进行的,因此,长度为n的记录序列需要进行n-1次排序才能完成整个序列的排序。时间复杂度为O(n2)。
希尔排序:希尔排序又称缩小增量排序,增量di可以有各种不同的取法,但最后一次排序时的增量必须为1,最简单可取di+1=di/2(取小)。时间复杂度为O(n(log2n)2)。
直接选择排序
说明:每次将后面的最小的找出来插入前面的已排好的序中。同理,具有n个记录的序列要做n-1次排序。
时间复杂度为O(n2)。
冒泡排序:两个两个比较,将大的往后移。通过第一次冒泡排序,使得待排序的n个记录中关键字最大的记录排到了序列的最后一个位置上。然后对序列中前n-1个记录进行第二次冒泡排序。。。对于n个记录的序列,共需进行n次冒泡排序。时间复杂度为O(n2)。
快速排序:又叫分区交换排序,是对冒泡排序方法的一种改进。时间复杂度为O(nlog2n)。
归并排序:将两个或两个以上的有序数据序列合并成一个有序数据序列的过程。时间复杂度为O(nlog2n)。
分为{1,2},{6,4},{5,3},{8,7}
对比后:{1,2},{4,6},{3,5},{7,8},次数4
对比后:{1,2,4,6},{3,5,7,8},次数4,因为4大于1,2因此不需要比较6
对比后:{1,2,3,4,5,6,7,8},次数6
总共是14
假设是按照升序排列:
分为{1,2},{6,4},{5,3},{8,7}
对比后:{1,2},{4,6},{3,5},{7,8},两两比较,次数4
对比后:{1,2,4,6},{3,5,7,8},取1和4比较,2和4比较,两次就够,3和7比较,5和6比较,两次,总共4次。
对比后:{1,2,3,4,5,6,7,8},次数6
总共是14
今年软设的考试的题目
答:归并排序算法是一种采用分治策略的有效排序方法,其核心步骤可以直观地描述如下:首先,我们需要预备一个足够大的空间,它的大小等于要合并的两个已排序序列的元素总数。这个空间的作用是用来存放最终合并后的有序序列。接下来,设置两个指针,初始位置分别指向两个已排序序列的起始位置,这两个指针就像是两...
答:我们必须证明第 12~17 行 for 循环的第一次迭代之前该循环不变式成立,且在该循环的每次迭代时保持该不变式,当循环终止时,该不变式须提供一种有用的性质来证明算法的正确性。前面我们分析了分治算法的过程,我们可以把 MERGE 作为归并排序算法中的一个子程序来用。上面已经对分治法做了正确性证明,...
答:1、归并排序算法是一类不同的排序方法,合并的含义是将两个或两个以上的有序数据序列合并成一个新的有序数据序列;2、基本思想是假设数组A有N个元素,数组A是N个有序的子序列组成,每个子序列的长度为1,两两重复合并,得到一个长度为N的有序数据序列为止;3、合并算法的核心操作就是将一维数组中...
答:归并操作,也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。如 设有数列{6,202,100,301,38,8,1} 初始状态:6,202,100,301,38,8,1 第一次归并后:{6,202},{100,301},{8,38},{1},比较次数:3;第二次归并后:{6,100,202,301},{1,8,38},比较次数:4;第...
答:第四个步骤是将[1, 6, 202, 100, 301]与[8, 38]合并,又需2次比较,最后得到[1, 6, 8, 38, 100, 202, 301]。总计,这个归并过程总共进行了11次比较。归并操作在归并排序中起到了关键作用,它确保了最终合并的序列是有序的,且在合并过程中,次数的计算可以帮助我们评估算法的效率。
答:归并排序是一种分治策略的排序算法,它将待排序序列分成若干个子序列,每个子序列是一个有序的序列,然后再将有序子序列合并成一个整体有序序列。归并排序首先将待排序序列平均分成两半,然后分别对两半进行排序,最后将两个已排序的子序列合并成一个整体有序的序列。这个过程可以递归地进行,直到序列完全...
答:结果分别为[ 3 , 4 , 6 , 1 0 ]和[ 2 , 5 , 7 , 8 ]。从两个序列的头部开始归并这两个已排序的序列。元素2比3更小,被移到结果序列;3与5进行比较,3被移入结果序列;4与5比较,4被放入结果序列;5和6比较,.。如果选择k= 4,则序列[ 1 0 , 4 ]和[ 6 , 3 , 8 , 2...
答:归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并操作的工作原理...
答:1、冒泡排序 2、选择排序 3、插入排序 4、希尔排序 5、归并排序 6、快速排序 7、堆排序 8、计数排序 9、桶排序 10、基数排序 排序算法包含的相关内容具体如下:冒泡排序算法 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较...
答:include <stdio.h> include <malloc.h> int *merger(int *arr1, int length1, int *arr2, int length2);//void sort(int *arr, int length);int main(void){ int i;/* 测试merger的归并效果 */ int a[5] = { 1,3, 5, 7, 9};int b[4] = {2, 4,6, 8};for (i =...