void bubbleSort(cars *x, int size) { int i, j; cars temp; for (i=0;i<size-1;i++) { for (j = i+1; j < size; j++) { if ( (x+i)->hp > (x+j)->hp ) { temp = x[j]; x[j] = x[i]; x[i] = temp; } } } }
This is the response to the comment in this code; it shows that the sorting I suggest is swap less ... :) Here is the code:
#include <stdio.h> #include <string.h> typedef struct { int x; int hp; } cars; int swaps; void bubbleSortB(cars *x, int size) { int i, j; cars temp; for (i=0;i<size-1;i++) { for (j = i+1; j < size; j++) { if ( (x+i)->hp > (x+j)->hp ) { temp = x[j]; x[j] = x[i]; x[i] = temp; swaps++; } } } } void bubbleSortA(cars *x, int size) { int i, j; for (i = 0; i < size-1; i++) { for (j = 0; j < size-1-i; j++) { if ( x[j].hp > x[j+1].hp ) { cars temp = x[j+1]; x[j+1] = x[j]; x[j] = temp; swaps++; } } } } int main(void) { int i; cars x[10]={ {1,4},{1,8},{1,12},{1,6},{1,5},{1,4},{1,8},{1,12},{1,6},{1,5} }; cars y[10]={ {1,4},{1,8},{1,12},{1,6},{1,5},{1,4},{1,8},{1,12},{1,6},{1,5} }; swaps=0; bubbleSortA(x,10); for(i=0;i<10;i++) printf("%d ",x[i].hp); printf("- swaps %d\n",swaps); swaps=0; bubbleSortB(y,10); //My sort for(i=0;i<10;i++) printf("%d ",y[i].hp); printf("- swaps %d\n",swaps); }