Advertisement
Guest User

quicksort

a guest
Feb 20th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.59 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. void quick_sort(int *a, int left, int right) {
  4.   int elem = a[left], l = left, r = right;
  5.   while (left < right) {
  6.     while ((a[right] >= elem) && (left < right)) right--;
  7.     if (left != right) {
  8.       a[left] = a[right];
  9.       left++;
  10.     }
  11.     while ((a[left] <= elem) && (left < right)) left++;
  12.     if (left != right){
  13.       a[right] = a[left];
  14.       right--;
  15.     }
  16.   }
  17.   a[left] = elem;
  18.   elem = left;
  19.   left = l;
  20.   right = r;
  21.   if (left < elem) quick_sort(a, left, elem - 1);
  22.   if (right > elem) quick_sort(a, elem + 1, right);
  23. }
  24.  
  25. void selection_sort(int *a, int n) {
  26.   int t;
  27.   for(int i = 0; i < n - 1; i++) {
  28.     int min = i;
  29.     for (int j = i + 1; j < n; j++) {
  30.       if (a[j] < a[min]) min = j;
  31.     }
  32.     if (min != i) {
  33.       t = a[i];
  34.       a[i] = a[min];
  35.       a[min] = t;
  36.      
  37.       min = i;
  38.     }
  39.   }
  40. }
  41.  
  42. void sort(int *a, int n, int m) {
  43.   if (n < m) quick_sort(a, 0, n - 1);
  44.   else selection_sort(a, n);
  45. }
  46.  
  47. int main()
  48. {
  49.         int n, m;
  50.         scanf("%d %d", &n, &m);
  51.         int *a;
  52.         a = (int*)malloc(n * sizeof(int));
  53.         for (int i = 0; i < n; i++) {
  54.                 scanf("%d", &a[i]);
  55.         }
  56.         sort(a, n, m);
  57.         for(int i = 0; i < n; i++) {
  58.           printf("%d ", a[i]);
  59.         }
  60.         free(a);
  61.     return 0;
  62. }
  63.  
  64. ____________________________________________________________________________________________________________________________
  65.  
  66. Быстрая сортировка + сортировка прямым выбором
  67.  
  68. Составьте программу quicksort.c, осуществляющую сортировку массива целых чисел в порядке возрастания.
  69. В программе должен быть реализован алгоритм быстрой сортировки, рекурсивную функцию которого нужно модифицировать таким образом, чтобы, во-первых, для последовательностей длиной меньше m выполнялась сортировка прямым выбором, а во-вторых, глубина стека вызовов была равна O(lg n), где n – размер массива.
  70. Программа должна считывать со стандартного потока ввода размер массива n, число m и значения элементов массива. В стандартный поток вывода должны выводиться элементы отсортированного массива.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement