Guest User

Untitled

a guest
May 28th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.21 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #include <time.h>
  4.  
  5. #include <stdlib.h>
  6.  
  7.  
  8. void swap(int *a, int *b) {
  9.  
  10.    
  11.  
  12.     int tmp;
  13.  
  14.     tmp = *a;
  15.  
  16.     *a=*b;
  17.  
  18.     *b=tmp;
  19.  
  20.    
  21.  
  22. }
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30. int randompivot(int a_length) {
  31.  
  32.    
  33.  
  34.     int index_pivot = rand() % a_length;
  35.  
  36.     //printf("Zufaellig gewaehlter Index: %d\n",index_pivot);
  37.  
  38.     return index_pivot;
  39.  
  40. }
  41.  
  42.  
  43.  
  44. int partition(int a[], int a_length) {
  45.  
  46.  
  47.     int al[a_length];  // geht mit gcc,
  48.     int ar[a_length];  // für Visual C muß malloc verwendet werden
  49.     int l, r, k, t;
  50.  
  51.  
  52.  
  53.     int index_pivot = randompivot(a_length); // Zufaelliger Index fuer Pivotelement
  54.  
  55.  
  56.  
  57.     int pivot = a[index_pivot]; // Pivotelement wird bestimmt
  58.  
  59.     swap(&a[index_pivot],&a[a_length-1]); // Pivotelement wird mit letzter Stelle des Arrays getauscht
  60.  
  61.     index_pivot = a_length-1; // Neuer Pivotindex
  62.  
  63.  
  64.  
  65.    // pivot = a[index_pivot];
  66.  
  67.    
  68.     l = 0; r = 0;
  69.     for(k = 0; k < a_length; k++) { // k beginnt ab 0 zu Zaehlen da Pivotelement immer an letzter Stelle steht
  70.  
  71.         if(a[k] <= pivot) {
  72.  
  73.             al[l] = a[k];   // Alle Elemente von a[] welsche <= pivotelement sind werden in al[] geschrieben
  74.             l++;   
  75.         }
  76.         else {
  77.             ar[r] = a[k]; // Alle > pivot in ar[]
  78.             r++;
  79.         }
  80.     }
  81.  
  82.  
  83.     t = 0;
  84.     for(k = 0; k < l-1; k++) {
  85.         a[t] = al[k];       // Schreibt alle Elemente <= pivot links vom Pivotelement zurueck in den ausgangsarray
  86.         t++;               
  87.     }  
  88.     a[t] = pivot;           // Position t ist nun Index fuer Pivotelement
  89.     index_pivot = t;
  90.     t++;       
  91.     for(k = 0; k < r; k++) {
  92.         a[t] = ar[k];       //Schreibt alle Elemente > Pivot rechts vom Pivotelement in Ausgangsarray
  93.         t++;       
  94.     }
  95.     return index_pivot;
  96. }
  97.  
  98.  
  99.  
  100. void quicksort(int a[], int links, int rechts) {
  101.  
  102.  
  103.  
  104.     if(links < rechts) {
  105.  
  106.         int pivot = partition(a, rechts+1);
  107.  
  108.         quicksort(a, links, pivot-1);
  109.  
  110.         quicksort(a, pivot+1, rechts);
  111.  
  112.     }
  113.  
  114.  
  115.  
  116.  
  117.  
  118. }
  119.  
  120. int main() {
  121.    
  122.  
  123.     int a[] = {4,1,3,4,6,7,5,5,9,1,3,4,6,7,9,1,2,5,8,5};
  124.     int n = sizeof(a)/sizeof(a[0]);
  125.     int k;
  126.  
  127.     int l = 0;
  128.  
  129.     int r = n-1;
  130.  
  131.  
  132.     quicksort(a,l,r);
  133.  
  134.  
  135.     printf("Daten:\t ");
  136.     for(k = 0; k < n; k++)
  137.  
  138.         printf("%d ", a[k]);
  139.  
  140.    
  141.  
  142.     printf("\nIndex:\t ");
  143.     for(k = 0; k < n; k++)
  144.  
  145.         printf("%d ", k);
  146.    
  147.  
  148.     return 0;
  149. }
Add Comment
Please, Sign In to add comment