Sorting Structures : structure sort « Structure « C Tutorial






struct address {
    char name[40];
    char street[40];
    char city[20];
    char state[3];
    char zip[11];
  };
  /* A Quicksort for structures of type address. */
  void quick_struct(struct address items[], int count)
  {
    qs_struct(items,0,count-1);
  }

  int qs_struct(struct address items[], int left, int right)
  {

    register int i, j;
    char *x;
    struct address temp;

    i = left; j = right;
    x = items[(left+right)/2].zip;

    do {
      while((strcmp(items[i].zip,x) < 0) && (i < right)) i++;
      while((strcmp(items[j].zip,x) > 0) && (j > left)) j--;
      if(i <= j) {
        temp = items[i];
        items[i] = items[j];
        items[j] = temp;
        i++; j--;
      }
    } while(i <= j);

    if(left < j) qs_struct(items, left, j);
    if(i < right) qs_struct(items, i, right);
  }

  int main(void){
   struct address addrs[4] = {
    "A. ", " 1st St", "AAAA", "Ga", "55555",
    "B. ", " 2nd Ave", "AA", "Pa", "33333",
    "C. ", " 3rd Blvd", "VVV", "OOOOO", "99999",
    "D. ", " Fourth Dr", "EEE", "MMMMM", "44444"
  };

    quick_struct(addrs, 4);

    int i;
    for(i =0;i<4;i++){
       printf("%s \n",addrs[i].zip);
    }

  }
33333
44444
55555
99999








9.3.structure sort
9.3.1.Sorting Structures