1 #include "ind_sort.h"
2 
exchange(int * ind_list,double * vals,int i,int j)3 void exchange(int *ind_list, double *vals, int i, int j)
4 {
5   int temp_int;
6   double temp_dbl;
7 
8   temp_int = ind_list[i];
9   ind_list[i] = ind_list[j];
10   ind_list[j] = temp_int;
11 
12   temp_dbl = vals[i];
13   vals[i] = vals[j];
14   vals[j] = temp_dbl;
15 }
16 
17 /*===========================================================================*/
18 
partition(int * ind_list,double * vals,int len)19 int partition(int *ind_list, double *vals, int len)
20 {
21 
22   int i=0, j, pivot;
23   double middle;
24 
25   j=len-1;
26   /*pivot=random() % len;*/
27   pivot=0;
28   middle = vals[pivot];
29 
30   exchange(ind_list, vals, pivot, j);
31 
32   while (i<j){
33     while ((i<j) && (vals[i] >= middle))
34        i++;
35     while ((i<j) && (vals[j] <= middle))
36        j--;
37     if (i<j)
38       exchange(ind_list, vals, i, j);
39   }
40   if (i!=len-1)
41     exchange(ind_list, vals, i, len-1);
42 
43   return(i);
44 }
45 
46 /*===========================================================================*/
47 
ind_sort(int * ind_list,double * vals,int len)48 void ind_sort(int *ind_list, double *vals, int len)
49 {
50 
51   int pivot;
52 
53   pivot=partition(ind_list, vals, len);
54 
55   if (pivot>=2)
56     ind_sort(ind_list, vals, pivot);
57   if (pivot <= len - 3)
58     ind_sort(ind_list+pivot+1, vals+pivot+1, len-pivot-1);
59 }
60 
61