Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- using namespace std;
- unsigned long long asignmentOperations, compareOperations;
- //функция сортировки
- void quickSort(int* mas, int first, int last) {
- int mid, count;
- int f = first, l = last;
- mid = mas[(f + l) / 2]; //вычисление опорного элемента
- do {
- while (mas[f] < mid) f++;
- while (mas[l] > mid) l--;
- if (f <= l) {
- count = mas[f];
- mas[f] = mas[l];
- mas[l] = count;
- f++;
- l--;
- }
- } while (f < l);
- if (first < l) quickSort(mas, first, l);
- if (f < last) quickSort(mas, f, last);
- }
- void merge(int arr[], int first, int m, int last) {
- int i, j, k;
- int n1 = m - first + 1;
- int n2 = last - m;
- int *lArr = new int[n1], *rArr = new int[n2]; //временные массивы
- // копировать данные во временные массивы
- for (i = 0; i < n1; i++) lArr[i] = arr[first + i];
- for (i = 0; i < n2; i++) rArr[i] = arr[m + 1 + i];
- i = j = 0; /* начальный индекс первого подмассива и начальный индекс второго подмассива*/
- k = first; /* начальный индекс объединенного подмассива */
- while (i < n1 && j < n2) {
- if (lArr[i] <= rArr[j]) arr[k] = lArr[i++];
- else arr[k] = rArr[j++];
- k++;
- }
- while (i < n1) arr[k++] = lArr[i++];
- while (j < n2) arr[k++] = rArr[j++];
- }
- void mergeSort(int arr[], int first, int last) {
- if (first < last) {
- int m = (first + last) / 2;
- mergeSort(arr, first, m);
- mergeSort(arr, m + 1, last);
- merge(arr, first, m, last);
- }
- }
- int getRandom(int max) {
- return rand() % max + 1;
- }
- void generateRandom(int arr[], int n) {
- for (int i = 0; i < n; i++) arr[i] = getRandom(n);
- }
- void generateGrowth(int arr[], int n) {
- for (int i = 0; i < n; i++) arr[i] = i;
- }
- void generateDescending(int arr[], int n) {
- for (int i = 0; i < n; i++) arr[i] = n - i - 1;
- }
- void printArr(int* arr, int n) {
- for (int i = 0; i < n; i++) cout << arr[i] << ' ';
- cout << endl;
- }
- void copyArr(int* arr, int* copy_arr, int n) {
- for (int i = 0; i < n; i++) copy_arr[i] = arr[i];
- }
- int main() {
- int n;
- srand(time(NULL));
- int typeN[] = { 10, 100, 1000, 10000 };
- for (int i = 0; i < 4; i++) {
- n = typeN[i];
- unsigned long long time;
- int* arr1 = new int[n];
- int* arr2 = new int[n];
- cout << "\n " << n << " \n";
- cout << "by random: " << endl;
- generateRandom(arr1, n);
- copyArr(arr1, arr2, n);
- time = clock();
- mergeSort(arr1, 0, n-1);
- time = clock() - time;
- cout << "margeSort time: " << time << endl;
- time = clock();
- quickSort(arr2, 0, n - 1);
- time = clock() - time;
- cout << "quickSort time: " << time << endl;
- cout << "by growth order: " << endl;
- generateGrowth(arr1, n);
- copyArr(arr1, arr2, n);
- time = clock();
- mergeSort(arr1, 0, n - 1);
- time = clock() - time;
- cout << "margeSort time: " << time << endl;
- time = clock();
- quickSort(arr2, 0, n - 1);
- time = clock() - time;
- cout << "quickSort time: " << time << endl;
- cout << "by descending order: " << endl;
- generateDescending(arr1, n);
- copyArr(arr1, arr2, n);
- time = clock();
- mergeSort(arr1, 0, n - 1);
- time = clock() - time;
- cout << "margeSort time: " << time << endl;
- time = clock();
- quickSort(arr2, 0, n - 1);
- time = clock() - time;
- cout << "quickSort time: " << time << endl;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment