Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.58 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int *array;
  5.  
  6. int compare(unsigned long i, unsigned long j)
  7. {
  8.         if (i <= j) {
  9.                 printf("COMPARE␣%d␣%d\n", i, j);
  10.         } else {
  11.                 printf("COMPARE␣%d␣%d\n", j, i);
  12.         }
  13.  
  14.         if (array[i] == array[j]) return 0;
  15.         return array[i] < array[j] ? -1 : 1;
  16. }
  17.  
  18. void swap(unsigned long i, unsigned long j)
  19. {
  20.         if (i <= j) {
  21.                 printf("SWAP␣%d␣%d\n", i, j);
  22.         } else {
  23.                 printf("SWAP␣%d␣%d\n", j, i);
  24.         }
  25.  
  26.         int t = array[i];
  27.         array[i] = array[j];
  28.         array[j] = t;
  29. }
  30.  
  31. void bubblesort(unsigned long nel,
  32.         int (*compare)(unsigned long i, unsigned long j),
  33.         void (*swap)(unsigned long i, unsigned long j))
  34.  
  35. {  
  36.     unsigned long t = nel − 1;
  37.     unsigned long r = nel − 1;
  38.     unsigned long l=0;
  39.     unsigned long i, k;
  40.    
  41.     while (l <= r){
  42.         if (t > 0){    
  43.         l=t;
  44.         t=0;
  45.             for (i=l; i < r; i++){
  46.                 if (compare(i+1, i) == -1){
  47.                 swap(i+1, i);
  48.                 t=i;
  49.                 }
  50.             }
  51.         i=l;
  52.         r=t;
  53.         k=r;
  54.             for (; i < k; k--){
  55.                 if (compare(k, k-1)== -1){
  56.                     swap(k, k-1);
  57.                     t=k;
  58.                 }                      
  59.             }
  60.         }
  61.     }  
  62. }
  63.  
  64.  
  65.  
  66. int main(int argc, char **argv)
  67. {
  68.         int i, n;
  69.         scanf("%d", &n);
  70.  
  71.         array = (int*)malloc(n * sizeof(int));
  72.         for (i = 0; i < n; i++) scanf("%d", array+i);
  73.  
  74.         bubblesort(n, compare, swap);
  75.         for (i = 0; i < n; i++) printf("%d ", array[i]);
  76.         printf("\n");
  77.  
  78.         free(array);
  79.         return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement