C++排序(4)——归并排序

    #include <iostream>
    #include <vector>
    using namespace std;
    
    //归并排序
    //算法时间复杂度 O(N*logN)
    //算法额外空间复杂度 O(N)
    void Merge(vector <int> &num_s, int left, int mid, int right)
    {
        vector <int> num_s0;
        int p = left;
        int q = mid + 1;
        int k = 0;
        while (p <= mid && q <= right)
            if(num_s[p] <= num_s[q])
                num_s0.push_back(num_s[p++]);
            else
                num_s0.push_back(num_s[q++]);
        while (p <= mid)
             num_s0.push_back(num_s[p++]);
        while (q <= right)
             num_s0.push_back(num_s[q++]);
            p = left;
        while (k < num_s0.size())
            num_s[p++] = num_s0[k++];
    }
    
    void Mergesort(vector <int> &num_s, int left, int right)
    {
        if(left == right)
            return ;
        int mid = (left + right) / 2;
        Mergesort(num_s, left, mid);
        Mergesort(num_s, mid + 1, right);
        Merge(num_s, left, mid, right); 
    }
    void Merge_Sort(vector <int> &num_s)
    {
        if (num_s.size() == 1)
            return ;
        int left = 0, right = num_s.size() - 1;
        Mergesort(num_s, left, right);
    }
    
    
    int main()
    {
        int num;
        vector <int> num_s;
    
        while(cin >> num)  
            num_s.push_back(num);
        
        cout << "the original data is: " << endl;
        for (int i = 0; i < num_s.size(); i++)
            cout << num_s[i] << ' ';
    
        Merge_Sort(num_s);
        
        cout << endl << "Merge_sort" << endl;
        for(int i = 0; i < num_s.size(); i++)
            cout << num_s[i] << ' ';
        system("pause");
        return 0;
    }

猜你喜欢

转载自blog.csdn.net/Cris_7/article/details/82836646