Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <thread>
- #include <mutex>
- int len = 50000000;
- void ShellSort(int *A, int N, int a, int b) {
- int j, t;
- for (int k = ((b - a) / b) * (N / 2); k > ((b - a - 1) / b) * (N / 2); k /= 2)
- for (int i = k; i < N; i++) {
- t = A[i];
- for (j = i; j >= k; j -= k)
- if (t < A[j - k])
- A[j] = A[j - k];
- else
- break;
- A[j] = t;
- }
- }
- void print(int*A) {
- for (int i = 0; i < len; i++)
- std::cout << " " << A[i];
- std::cout << "\n\n";
- }
- int main() {
- int *A = new int[len];
- int *B = new int[len];
- for (int i = 0; i < len; i++)
- B[i] = A[i] = rand() % 1000;
- //std::cout << " Unsorted array:" << std::endl;
- //print(A);
- int start_time = clock();
- ShellSort(A, len, 0, 1);
- int end_time = clock();
- std::cout << " Sorted by 1 thread:" << std::endl;
- //print(A);
- std::cout << "\n\t\tTime: " << end_time - start_time << std::endl;
- system("pause");
- system("cls");
- //std::cout << " Unsorted array:" << std::endl;
- //print(B);
- OneMoreTry:
- int amount;
- std::cout << " Enter thread amount (max = " << len << " )" << std::endl;
- std::cin >> amount;
- if (amount > len || amount < 0) {
- std::cout << " Error thread amount" << std::endl;
- goto OneMoreTry;
- }
- start_time = clock();
- std::thread** stream = new std::thread*[amount];
- for (int i = 0; i < amount; i++)
- stream[i] = new std::thread(ShellSort, B, len, i, amount);
- for (int i = 0; i < amount; i++)
- stream[i]->join();
- end_time = clock();
- std::cout << "Sorted by " << amount << " threads:" << std::endl;
- //print(B);
- std::cout << "Time: " << end_time - start_time << std::endl;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement