Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include <time.h>
- #include <locale.h>
- #include <math.h>
- // Функции заполнения и вывода двумерных мвссивов и функции swap
- void swapInt(int *a, int *b) {
- int t = *a;
- *a = *b;
- *b = t;
- }
- // QUICKSORT and QUICKSORT FAST
- void fillIntRandom(int* array, int size, int border) {
- srand(time(NULL));
- for (int i = 0; i < size; ++i)
- *(array + i) = rand() % border;
- }
- void printIntArray(int* array, int size, int offset) {
- char format[7];
- sprintf(format, "%%%dd", offset);
- for (int i = 0; i < size; ++i) {
- printf(format, array[i]);
- if (i != size - 1)
- printf(",");
- }
- printf("\n");
- }
- // QUICKSORT FAST
- // Первоначальный вариант
- /*int median (int* a, int* b, int* c)
- {
- if (*a > *b)
- {
- if (*c > *a)
- {
- return *a;
- }
- return (*b > *a) ? *b : *c;
- }
- if (*c > *b)
- {
- return *b;
- }
- return (*a > *c) ? *a : *c;
- }*/
- // Вроде что-то не то
- int median (int* a, int* b, int* c)
- {
- if (*a > *b)
- {
- int t = *a;
- *a = *b;
- *b = t;
- }
- if (*b > *c)
- {
- int t = *b;
- *b = *c;
- *c = t;
- }
- if (*a > *b)
- {
- int t = *a;
- *a = *b;
- *b = t;
- }
- void qsf(int* arr, int first, int last)
- {
- int i = first;
- int j = last;
- // Сортировка вставками которая должна отрабатывать в рекурсии по идее
- if (arr[(last - first)] <= 10)
- {
- int temp, pos;
- for (int i = first; i <= last; ++i)
- {
- temp = arr[i];
- pos = i - 1;
- while (pos >= 0 && arr[pos] > temp)
- {
- arr[pos + 1] = arr[pos];
- pos--;
- }
- arr[pos + 1] = temp;
- }
- }
- int x = median(&arr[first], &arr[(first + last) / 2], &arr[last]);
- do {
- while (arr[i] < x)
- {
- i++;
- }
- while (arr[j] > x)
- {
- j--;
- }
- if (i <= j)
- {
- swapInt(&arr[i], &arr[j]);
- i++;
- j--;
- }
- } while (i <= j);
- if (i < last)
- {
- qs(arr, i, last);
- }
- if (first < j)
- {
- qs(arr, first, j);
- }
- }
- int main()
- {
- setlocale(LC_ALL, "rus");
- // QUICKSORT
- const int SZ = 30;
- int arr[SZ];
- fillIntRandom(arr, SZ, 100);
- printIntArray(arr, SZ, 3);
- qsf(arr, 0, SZ - 1);
- printIntArray(arr, SZ, 3);
- // QUICKSORT FAST
- return 0;
- }
Add Comment
Please, Sign In to add comment