Пример #1
0
int main(int argc, char** argv) 
{
	system("PAUSE");
	
	std::list<int> a_list, b_list;
	std::srand(std::time(0)); // use current time as seed for random generator
    	
	for (int i = 0; i < 5000000; ++i)
	{
		int value = std::rand();
		a_list.push_back(value);
		b_list.push_back(value);
	}
	
	//std::list<int> b_list(a_list);
	std::cout << "b_list.size() = " << b_list.size() << std::endl;
	
    // record start time
    auto start = std::chrono::system_clock::now();
    // do some work
    a_list = parallel_quick_sort(a_list);
    
    // record end time
    auto end = std::chrono::system_clock::now();
    std::chrono::duration<double> diff = end-start;
    std::cout << "Time to sort a list of " 
              << a_list.size() << " ints : " << diff.count() << " s\n";
              
    std::cout << "Thread counter is " << thread_counter << std::endl;
	
		
    // record start time
    auto startb = std::chrono::system_clock::now();

    // do some work
    b_list = sequential_quick_sort(b_list);
    
    // record end time
    auto endb = std::chrono::system_clock::now();
    std::chrono::duration<double> diffb = endb-startb;
    std::cout << "Time to sort b list of " 
              << b_list.size() << " ints : " << diffb.count() << " s\n";
              
    auto itrA = a_list.begin();
    auto itrB = b_list.begin();
    for (int i = 0; i < 10; i++)
    {
    	std::cout << *(itrA++) << " ";
	}
	std:: cout << std::endl;

    for (int i = 0; i < 10; i++)
    {
    	std::cout << *(itrB++) << " ";
	}
	
	return 0;
}
Пример #2
0
int main() {
    std::list<int> lst = {4, 1, 3, 2, 6, 8, 7};
    lst = parallel_quick_sort(lst);
    for (auto&& c : lst) {
        std::cout << c << " ";
    }
    std::cout << std::endl;
    return 0;
}
Пример #3
0
int main()
{
    std::list<int> list1 = {4, 2, 1, 5, 8, 9, 7};
    std::list<int> sorted1 = sequential_quick_sort(list1);
    std::list<int> sorted2 = parallel_quick_sort(list1);
    std::cout << "sorted1: " << sorted1 << std::endl;
    std::cout << "sorted2: " << sorted2 << std::endl;
    return 0;
}
Пример #4
0
int main() {
    std::list<int> lst = {4, 1, 2, 3, 5, 6, 7, 8};
    lst = parallel_quick_sort(lst);
    for (auto&& c : lst) {
        std::cout << c << ' ';
    }
    std::cout << std::endl;
    return 0;
}
Пример #5
0
int main()
{
	sorter<int> srt;
	std::list<int> data;

	for(int i =0; i < 300000; i++) {
		data.push_back(rand() % 100);
	}
	data = parallel_quick_sort(data);   
	std::for_each(data.begin(), data.end(), [](int n){ std::cout << n << " "; });
	std::cout << std::endl;

	return 0;
}
Пример #6
0
int main(int argc, char *argv[]) {
  int size = 0;
  int i = 0;

  for (i=0, size=10*1000; i<20; i++, size += 10*1000)
  {
    int *list = (int*)malloc(sizeof(int)*size);
    struct timeval tm;

    rand_list(list, size);

    gettimeofday(&tm, NULL);
    long long time_start = tm.tv_sec*1000LL*1000LL + tm.tv_usec;
    
    quick_sort(list, size);

    gettimeofday(&tm, NULL);
    long long single_time = (tm.tv_sec*1000LL*1000LL + tm.tv_usec) - time_start;

#if CHECK
    int i = 0;
    for (i=0; i<size; i++)
      if (list[i] != i)
        printf("error\n");
#endif

    gettimeofday(&tm, NULL);
    time_start = tm.tv_sec*1000LL*1000LL + tm.tv_usec;
    
    parallel_quick_sort(list, size);

    gettimeofday(&tm, NULL);
    long long parallel_time = (tm.tv_sec*1000LL*1000LL + tm.tv_usec) - time_start;

#if CHECK
    for (i=0; i<size; i++)
      if (list[i] != i)
        printf("error\n");
#endif

    printf("size=%d\tsingle=%lld\tparallel=%lld\trate=%0.4f\n", 
        size, single_time, parallel_time, ((float)single_time / (float)parallel_time) - 1);
  }

	return 0;
}
Пример #7
0
std::list<T> parallel_quick_sort(std::list<T> input) {
    if (input.empty())
        return input;

    std::list<T> result;
    result.splice(result.begin(), input, input.begin());
    const T& pivot = *result.begin();

    auto pt = std::partition(input.begin(), input.end(),
                             [&](const T& x) { return x < pivot; });
    std::list<T> lower_part;
    lower_part.splice(lower_part.end(), input, input.begin(), pt);

    std::future<std::list<T>> new_lower(
        std::async(&parallel_quick_sort<T>, std::move(lower_part)));

    auto new_higher = parallel_quick_sort(std::move(input));
    result.splice(result.end(), new_higher);
    result.splice(result.begin(), new_lower.get());
    return result;
}