算法分析:归并排序
刚刚看了网易公开课上的算法导论的第一节,讲的是插入排序和归并排序。
插入排序很简单
双重循环,第一层循环i从1到n,第二层循环j从0到i,将元素插入的0到i已经排好序的序列中正确的位置,这就是插入排序。
时间复杂度的最坏情况是1+2+3+4+···+n也就是n*(n+1)/2,最后时间复杂度就是n^2.
归并排序感触颇深,想详细总结一下
对于一个有n个元素的数组(1,2,3···n)的排序,假设从 1 到 (n/2的向上取整) 为有序的,(n/2+1的向上取整)到 n 也是有序的,那么将这两个数组合并,得到完整有序的数组所需要花费的时间为n。
递归第二层:
同理,对于数组的前(n/2的向上取整)个元素的排序,同样假设从 1 到(n/4的向上取整)为有序的,(n/4+1的向上取整)到 (n/2的向上取整)为有序的,那么得到完整有序的前(n/2的向上取整)个元素所花费的时间为n/2。
递归第三层:。。。
如图:
所以总的时间复杂度应该是n*log(n)
刚刚看了网易公开课上的算法导论的第一节,讲的是插入排序和归并排序。
插入排序很简单
双重循环,第一层循环i从1到n,第二层循环j从0到i,将元素插入的0到i已经排好序的序列中正确的位置,这就是插入排序。
时间复杂度的最坏情况是1+2+3+4+···+n也就是n*(n+1)/2,最后时间复杂度就是n^2.
归并排序感触颇深,想详细总结一下
对于一个有n个元素的数组(1,2,3···n)的排序,假设从 1 到 (n/2的向上取整) 为有序的,(n/2+1的向上取整)到 n 也是有序的,那么将这两个数组合并,得到完整有序的数组所需要花费的时间为n。
递归第二层:
同理,对于数组的前(n/2的向上取整)个元素的排序,同样假设从 1 到(n/4的向上取整)为有序的,(n/4+1的向上取整)到 (n/2的向上取整)为有序的,那么得到完整有序的前(n/2的向上取整)个元素所花费的时间为n/2。
递归第三层:。。。
如图:
所以总的时间复杂度应该是n*log(n)