#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>

struct book_list{
        char name[32];
        float price;
};

static struct book_list * list; 
static int n_index[5], p_index[5];

static void show_list(struct book_list *p, int size);
static int  compareName(const void *p1, const void *p2);
static int  comparePrice(const void *p1, const void *p2);

static int  comparePrice(const void *p1, const void *p2)
{
    int a = *((int *)p1);
    int b = *((int *)p2);
   
    if(list[a].price < list[b].price) return -1; 
    else if (list[a].price == list[b].price) return 0;
    else return 1;
}
       
int  main(int argc, char *argv[])
{
   int j;
    
  	struct book_list mylist[]={
  	   {"Java",20.0},
  	   {"C++",8.3},
  	   {"Linux",18.9},
  	   {"Pic singel chip",12.6},
  	   {"ARM",25.3}
  	};
  
    list = &mylist[0];
  
    for(j=0;j<5;j++)
    {  
       n_index[j]=j; p_index[j]=j;  
    }     

 	qsort(&p_index[0], 5, sizeof(int), comparePrice);
  	
    printf("------after sorting by price-------\n");
  	show_list(&mylist[0], p_index,5);
           
   exit(EXIT_SUCCESS);

 }


static void show_list(struct book_list *p, int index[],int size)
{
    int j;
    for (j = 0; j < size; j++)
      printf("%15s %.1f \n", p[index[j]].name, p[index[j]].price);  
}








