码迷,mamicode.com
首页 > 编程语言 > 详细

C++排序-2

时间:2017-01-29 22:18:56      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:rand   ios   cto   c++   ret   algorithm   end   return   堆排序   

4、归并排序

#include <vector>
#include <iostream>
#include <random>
#include <algorithm>

using namespace std;

void MergeSort(vector<int> &data, vector<int> &cdata, int p, int r);
void Merge(vector<int> &data, vector<int> &cdata, int p, int q, int r);

void MergeSort(vector<int> &data)
{
    vector<int> cdata(data.size());
    MergeSort(data, cdata, 0, data.size() - 1);
}

void MergeSort(vector<int> &data, vector<int> &cdata, int p, int r)
{
    if (p < r) {
        int q = (p + r) / 2;
        MergeSort(data, cdata, p, q);
        MergeSort(data, cdata, q + 1, r);
        Merge(data, cdata, p, q, r);
    }
}

void Merge(vector<int> &data, vector<int> &cdata, int p, int q, int r)
{
    for (int i = p; i <= r; ++i)
        cdata[i] = data[i];

    int i = p, j = q + 1, k = p;

    while (i <= q && j <= r) {
        if (cdata[i] <= cdata[j])
            data[k++] = cdata[i++];
        else
            data[k++] = cdata[j++];
    }

    while (i <= q)
        data[k++] = cdata[i++];
    while (j <= r)
        data[k++] = cdata[j++];
}


int main(int argc, char *argv[])
{
    vector<int> data1 = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
    vector<int> data2;

    default_random_engine dre(7);
    uniform_int_distribution<int> di(-100, 100);

    for (int i = 0; i < 50; ++i)
        data2.push_back(di(dre));

    MergeSort(data1);
    for (auto i : data1)
        cout << i << " ";
    cout << endl;

    MergeSort(data2);
    for (auto i : data2)
        cout << i << " ";
    cout << endl;
    return 0;
}

5、堆排序

 

C++排序-2

标签:rand   ios   cto   c++   ret   algorithm   end   return   堆排序   

原文地址:http://www.cnblogs.com/sgkind/p/6357752.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!