Advertisement
Guest User

Untitled

a guest
Apr 10th, 2020
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.97 KB | None | 0 0
  1. void insert_sort(double* a, int n) {
  2.     int i, j; double tmp;
  3.     for (i = 1; i < n; ++i) {
  4.         tmp = a[i];
  5.         for (j = i; j > 0; --j) {
  6.             if (a[j - 1] <= tmp)
  7.                 break;
  8.             a[j] = a[j - 1];
  9.         }
  10.         a[j] = tmp;
  11.     }
  12. }
  13.  
  14. int partition(double* a, int n, int (*p)(double, double)) {
  15.     double x; int i = -1, j = n;
  16.     swap(a, a + n / 2);
  17.     x = a[0];
  18.     while (1) {
  19.         do --j;
  20.         while ((*p)(a[j], x) < 0);
  21.         do ++i;
  22.         while ((*p)(a[i], x) > 0);
  23.         if (i < j)
  24.             swap(a + i, a + j);
  25.         else return j;
  26.     }
  27. }
  28.  
  29. void quicksort(double* a, int n, int (*p)(double, double)) {
  30.     int k;
  31.     double *t;
  32.     if (n < 1) return;
  33.     while (n > 1) {
  34.         k = partition(a, n, p);
  35.         if (k + 1 < n - k - 1) {
  36.             ++k;
  37.             n -= k;
  38.             t = a;
  39.             a += k;
  40.         }
  41.         else  {
  42.         t = a + k + 1;
  43.         k = n - k - 1;
  44.         n -= k;
  45.         }
  46.         quicksort(t, k, p);
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement