zoukankan      html  css  js  c++  java
  • 归并排序

    #define Max 2147483647
    
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    void Merge(int *A, int p, int q, int r)
    {
    	int i, j;
    	int n1 = q - p + 1;
    	int n2 = r - q;
    	//归并堆
    	int *L = new int[n1 + 1];
    	//归并堆
    	int *R = new int[n2 + 1];
    	for (i = 0; i < n1; ++i)
    	{
    		L[i] = A[p + i - 1];
    	}
    	for (j = 0; j < n2; ++j)
    	{
    		R[j] = A[q + j];
    	}
    	L[n1] = Max;
    	R[n2] = Max;
    	i = 0;
    	j = 0;
    	for (int k = p - 1; k < r; ++k)
    	{
    		if (L[i] <= R[j])
    		{
    			A[k] = L[i++];
    		}
    		else
    		{
    			A[k] = R[j++];
    		}
    	}
    }
    
    void MergeSort(int *A, int p, int r)
    {
    	if (p < r)
    	{
    		int q = (p + r) / 2;
    		MergeSort(A, p, q);
    		MergeSort(A, q + 1, r);
    		Merge(A, p, q, r);
    	}
    }
    
    int main(void)
    {
    	int A[7] = { 18, 45, 36, 30, 92, 72, 25 };
    	MergeSort(A, 1, 7);
    	for (int i = 0; i < 7; ++i)
    	{
    		cout << A[i] << " ";
    	}
    	cout << endl;
    	system("pause");
    	return 0;
    }
    

      

    分析:T(n) = c  若n=1

           =2T(n/2)+cn  若n>1

       解得:T(n) = 2^(log(2)n)T(1) + (2^0+2^1+···+2^(log(2)n - 1))cn

            =2^(log(2)n)c + (2^0+2^1+···+2^(log(2)n - 1))cn

       总代价为cnlgn+cn,它就是O(nlgn)。

  • 相关阅读:
    去除百度搜索结果中的广告的 js 代码
    js获取url参数
    奇淫技巧
    js生成hash序列
    Maven中可以被继承的POM元素
    多线程
    IO在Socket中的应用
    关于IO的整理
    finalize方法的使用
    复合赋值和简单复制的区别
  • 原文地址:https://www.cnblogs.com/mubu/p/5786033.html
Copyright © 2011-2022 走看看