quicksort,帮助类问题,时间,矢量,c ++

时间:2015-10-01 18:49:21

标签: c++ algorithm vector quicksort helper

我最大的问题是让quickSortHelper类工作。我知道我想要的参数是什么,我需要调用的内容是我无法弄清楚的。我尝试过使用分区和快速排序的混合物,但我无法弄明白。代码是这样编写的,因为我将来会使用一个timesort类来解决和计算6+排序算法。我只需将代码抛入main即可使用。但我想在里面主要是我在这里。

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

//i know not all the above libraries are being used, once quickSort is 
//working i plan on adding it to 5 other sorting algorithms, where these
//are neccessary.

using namespace std;

void quickSort(vector<int>&, int, int);
int partition(vector<int>&, int, int);
double timeSort(vector<int> &v, function<void(vector<int>&)>f);

int main()
{
    vector<int>intVec(1000);
    generate(intVec.begin(), intVec.end(), rand);

    int p = 0;
    int q = 1000;
    quickSort(intVec, p, q);

    auto time = timeSort(intVec, quickSort);
    for (auto i = 0u; i != intVec.size(); ++i)
    cout << intVec[i] << " ";
    cout << "\nQuick sort took " << time << " nanoseconds\n";

    char chubby;
    cin >> chubby;
    return 0;
}
double timeSort(vector<int> &v, function<void(vector<int>&)>f)
{
    auto start = chrono::high_resolution_clock::now();
    f(v);
    auto end = chrono::high_resolution_clock::now();
    return static_cast<double>(((end - start).count()));
}
int partition(vector<int>&intVec, int p, int q)
{
    int x = intVec[p];
    int i = p;
    int j;

for (j = p + 1; j < q; j++)
{
    if (intVec[j] <= x)
    {
        i = i + 1;
        swap(intVec[i], intVec[j]);
    }
}

    swap(intVec[i], intVec[p]);
    return i;
}

void quickSort(vector<int>&intVec, int p, int q)
{
    int r;
    if (p < q)
    {
        r = partition(intVec, p, q);
        quickSort(intVec, p, r);
        quickSort(intVec, r + 1, q);
    }
}
void quickSortHelper(vector<int>&intVec)
{
    //i want to make a call to the timeSort function with
    //quickSortHelper, i can't use quickSort directly because timeSort
    //only has 2 parameters, the vector to be solved, and the method of
    //solving it. i know 

}

2 个答案:

答案 0 :(得分:0)

我建议简化您的计划:

int main(void) 
{
    vector<int>intVec(1000);
    unsigned int duration = 0;
    for (unsigned int iteration = 0;
         iteration < 1000000;
         ++iteration)
    {
        generate(intVec.begin(), intVec.end(), rand);

        int p = 0;
        int q = 1000;
        auto start = chrono::high_resolution_clock::now();
        quickSort(intVec, p, q);
        auto end = chrono::high_resolution_clock::now();
        duration += (end - start);
    }
    cout << "Average time for quicksort: " << (duration / 1000000) << "\n";
    cout.flush();

    return 0;
}

我做了以下更改:
1)运行多次迭代的排序以获得平均持续时间 2)删除了定时功能;它只会使事情复杂化。

答案 1 :(得分:0)

嗯......如果我理解正确,应该这样做:

void quickSortHelper(vector<int>&intVec)
{
    quickSort(intVec, 0, intVec.size());
}