Go to the documentation of this file.00001
00002
00003
00004
00005
00011 #include <fvar.hpp>
00012 #include "qsort.h"
00013
00017 void int_qsort(int *arr, unsigned n)
00018 {
00019 #define int_lt(a,b) ((*a)<(*b))
00020 QSORT(int, arr, n, int_lt);
00021 }
00022
00026 void int_qsort2(int *arr, int *arr2, unsigned n)
00027 {
00028 #define int_lt(a,b) ((*a)<(*b))
00029 QSORT2(int, int, arr, arr2, n, int_lt);
00030 }
00031
00040 ivector sort(const ivector &v, int NSTACK)
00041 {
00042 int lb=v.indexmin();
00043 int size=v.size();
00044
00045 ivector intarray(0,size-1);
00046 for(int i=0;i<size;i++)
00047 {
00048 intarray[i] = v(lb+i);
00049 }
00050
00051 if (size > 1)
00052 {
00053 int_qsort(&(intarray(0)), (unsigned int)size);
00054 }
00055
00056 int ub=v.indexmax();
00057 ivector arr(lb, ub);
00058 for(int i=0;i<size;i++) {
00059 arr(lb+i) = intarray[i];
00060 }
00061
00062 return arr;
00063 }
00064
00074 ivector sort(const ivector &_v, const ivector &_index, int NSTACK)
00075 {
00076 ivector & index = (ivector &) _index;
00077 ivector & v = (ivector &) _v;
00078
00079 if (v.size() != index.size())
00080 {
00081 cerr << " Incompatible array sizes in vector v and ivector index\n"
00082 << " in ivector sort(const ivector& v, const ivector& index)\n";
00083 ad_exit(1);
00084 }
00085
00086 int lb=v.indexmin();
00087 int size=v.size();
00088
00089 ivector intarray(0,size-1);
00090 for(int i=0;i<size;i++)
00091 {
00092 intarray[i] = v(lb+i);
00093 }
00094
00095 ivector intarray2(0,size-1);
00096 for(int i=0;i<size;i++)
00097 {
00098 intarray2[i] = lb+i;
00099 }
00100
00101 if (size > 1)
00102 {
00103 int_qsort2(&(intarray[0]),&(intarray2[0]), (unsigned int)size);
00104 }
00105
00106 int ub=v.indexmax();
00107 ivector arr(lb, ub);
00108 for(int i=0;i<size;i++) {
00109 arr(lb+i) = intarray[i];
00110 }
00111
00112 for(int i=0;i<size;i++) {
00113 index(index.indexmin()+i) = intarray2[i];
00114 }
00115
00116 return arr;
00117 }