Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- int *array;
- int compare(unsigned long i, unsigned long j)
- {
- if (i <= j) {
- printf("COMPARE␣%d␣%d\n", i, j);
- } else {
- printf("COMPARE␣%d␣%d\n", j, i);
- }
- if (array[i] == array[j]) return 0;
- return array[i] < array[j] ? -1 : 1;
- }
- void swap(unsigned long i, unsigned long j)
- {
- if (i <= j) {
- printf("SWAP␣%d␣%d\n", i, j);
- } else {
- printf("SWAP␣%d␣%d\n", j, i);
- }
- int t = array[i];
- array[i] = array[j];
- array[j] = t;
- }
- void bubblesort(unsigned long nel,
- int (*compare)(unsigned long i, unsigned long j),
- void (*swap)(unsigned long i, unsigned long j))
- {
- unsigned long t = nel − 1;
- unsigned long r = nel − 1;
- unsigned long l=0;
- unsigned long i, k;
- while (l <= r){
- if (t > 0){
- l=t;
- t=0;
- for (i=l; i < r; i++){
- if (compare(i+1, i) == -1){
- swap(i+1, i);
- t=i;
- }
- }
- i=l;
- r=t;
- k=r;
- for (; i < k; k--){
- if (compare(k, k-1)== -1){
- swap(k, k-1);
- t=k;
- }
- }
- }
- }
- }
- int main(int argc, char **argv)
- {
- int i, n;
- scanf("%d", &n);
- array = (int*)malloc(n * sizeof(int));
- for (i = 0; i < n; i++) scanf("%d", array+i);
- bubblesort(n, compare, swap);
- for (i = 0; i < n; i++) printf("%d ", array[i]);
- printf("\n");
- free(array);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement