在排序方法中,元素比较次数与元素的初始排列无关的是()
A.Shell 排序
B.归并排序
C.直接插入排序
D.选择排序
正确答案是 D
A、C肯定不选的,归并排序的在merge中是跟序列有关,如果有序,比较次数最少n/2,最糟是元素错落n-1。而选择排序比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。所以 应该是选择排序!
比之前听的课更好懂
云里雾里地听完了……
我想咨询一下产品经理对技术的要求有多高呢?请问数据科学专业投递平台型产品经理是否合适呢?我是海外留学生,并没有相关的产品实习经验,本科时期的实习经历也很少,都是会计师事务所的事情,感觉对这个岗位应聘没有任何帮助。由于今年疫情原因现在还在国外也没办法回去进行实习,现在秋招就快开始了真的很焦虑了
归并排序中的merge是
说起归并算法,我不说概念性的东西。举个例子就可以看出来了
直接插入排序很明显,在完全有序的情况下每个元素只需要与他左边的元素比较一次就可以确定他最终的位置;
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
选择排序无视队列原来是否有序,他自己都会再排一遍,所以它的时间复杂度一直是最差的O(n2),最好情况和最差情况一样
关于归并可以这么解释。首先归并排序中 merge的任务是把两个有序数组合并为一个有序数组。假设A,和B为两个有序数组,合并为一个有序数组C,最好情况比较n/2次(n为数组C的长度,假设数组A和数组B等长,都为n/2),这种情况的前提条件是数组A中最小的元素比数组B中最大的元素要大。那么只要A[0]和B中所有元素都比较过一遍以后,数组A中的其他元素就不用比较了,所以比较了n/2次。最坏情况元素错落,A[0]和B[0]比,假设得出A[0]以后,A[0]先和B[1]比,B[1]再和A[1]比,A[1]再和B[2]比..........那就是n-1次。不知道自己分析的对不对,还是有点疑惑。我的疑惑是归并算法它的时间复杂度不管最好最坏都是一样的O(nlogn),它和比较次数难道没有关系吗?求大神回答。
请写出以下代码执行输出:(构造函数、静态块执行顺序)
从浏览器输入URL到展示页面的全流程是怎么样的?
多线程中sleep()和wait()方法的区别
请实现KMP算法?
比之前听的课更好懂
云里雾里地听完了……
我想咨询一下产品经理对技术的要求有多高呢?请问数据科学专业投递平台型产品经理是否合适呢?我是海外留学生,并没有相关的产品实习经验,本科时期的实习经历也很少,都是会计师事务所的事情,感觉对这个岗位应聘没有任何帮助。由于今年疫情原因现在还在国外也没办法回去进行实习,现在秋招就快开始了真的很焦虑了
归并排序中的merge是
说起归并算法,我不说概念性的东西。举个例子就可以看出来了
直接插入排序很明显,在完全有序的情况下每个元素只需要与他左边的元素比较一次就可以确定他最终的位置;
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
选择排序无视队列原来是否有序,他自己都会再排一遍,所以它的时间复杂度一直是最差的O(n2),最好情况和最差情况一样
关于归并可以这么解释。首先归并排序中 merge的任务是把两个有序数组合并为一个有序数组。假设A,和B为两个有序数组,合并为一个有序数组C,最好情况比较n/2次(n为数组C的长度,假设数组A和数组B等长,都为n/2),这种情况的前提条件是数组A中最小的元素比数组B中最大的元素要大。那么只要A[0]和B中所有元素都比较过一遍以后,数组A中的其他元素就不用比较了,所以比较了n/2次。最坏情况元素错落,A[0]和B[0]比,假设得出A[0]以后,A[0]先和B[1]比,B[1]再和A[1]比,A[1]再和B[2]比..........那就是n-1次。不知道自己分析的对不对,还是有点疑惑。我的疑惑是归并算法它的时间复杂度不管最好最坏都是一样的O(nlogn),它和比较次数难道没有关系吗?求大神回答。