45static int num_cmp1(
int * x,
int * y) {
return ((*x) < (*y)) ? -1 : (((*x) > (*y)) ? 1 : 0); }
46static int num_cmp2(
int * x,
int * y) {
return (*x) < (*y); }
47static inline void selectionsort(
int* array,
int size,
int(*comp)(
const void *,
const void *))
51 for (i = 0; i <
size-1; i++){
53 for (j = i+1; j <
size; j++){
54 if (comp(array + j, array + best_i))
57 tmp = array[i]; array[i] = array[best_i]; array[best_i] = tmp;
60static void sort_rec(
int* array,
int size,
int(*comp)(
const void *,
const void *))
63 selectionsort(array, size, comp);
65 int pivot = array[
size/2];
70 do i++;
while(comp(array + i, &pivot));
71 do j--;
while(comp(&pivot, array + j));
73 tmp = array[i]; array[i] = array[j]; array[j] = tmp;
75 sort_rec(array , i , comp);
76 sort_rec(&array[i], size-i, comp);
79void minisat_sort(
int* array,
int size,
int(*comp)(
const void *,
const void *))
81 sort_rec(array,size,comp);
96static inline void selectionsort2(
int* array,
int size)
100 for (i = 0; i <
size-1; i++){
102 for (j = i+1; j <
size; j++){
103 if (array[j] < array[best_i])
106 tmp = array[i]; array[i] = array[best_i]; array[best_i] = tmp;
109static void sort_rec2(
int* array,
int size)
112 selectionsort2(array, size);
114 int pivot = array[
size/2];
119 do i++;
while(array[i] < pivot);
120 do j--;
while(pivot < array[j]);
122 tmp = array[i]; array[i] = array[j]; array[j] = tmp;
124 sort_rec2(array , i );
125 sort_rec2(&array[i], size-i);
130 sort_rec2(array,size);
149 for ( i = 0; i < nSize; i++ )
156 for ( i = 1; i < nSize; i++ )
157 assert( pArray[i-1] <= pArray[i] );
161 int nSize = 100000000;
165 printf(
"Sorting %d integers\n", nSize );
168 qsort( pArray, (
size_t)nSize, 4, (
int (*)(
const void *,
const void *)) num_cmp1 );
169ABC_PRT(
"qsort ", Abc_Clock() - clk );
175 minisat_sort( pArray, nSize, (
int (*)(
const void *,
const void *)) num_cmp2 );
176ABC_PRT(
"minisat", Abc_Clock() - clk );
183ABC_PRT(
"minisat with inlined comparison", Abc_Clock() - clk );
199static inline void selectionsort3(
float* array,
int* perm,
int size)
204 for (i = 0; i <
size-1; i++){
206 for (j = i+1; j <
size; j++){
207 if (array[j] < array[best_i])
210 tmpf = array[i]; array[i] = array[best_i]; array[best_i] = tmpf;
211 tmpi = perm[i]; perm[i] = perm[best_i]; perm[best_i] = tmpi;
214static void sort_rec3(
float* array,
int* perm,
int size)
217 selectionsort3(array, perm, size);
219 float pivot = array[
size/2];
225 do i++;
while(array[i] < pivot);
226 do j--;
while(pivot < array[j]);
228 tmpf = array[i]; array[i] = array[j]; array[j] = tmpf;
229 tmpi = perm[i]; perm[i] = perm[j]; perm[j] = tmpi;
231 sort_rec3(array , perm, i );
232 sort_rec3(&array[i], &perm[i], size-i);
237 sort_rec3(array, perm, size);
257 for ( i = 0; i < nSize; i++ )
#define ABC_ALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
int * Gia_SortFloats(float *pArray, int *pPerm, int nSize)
void minisat_sort3(float *array, int *perm, int size)
int * Gia_SortGetTest(int nSize)
void Gia_SortVerifySorted(int *pArray, int nSize)
void minisat_sort2(int *array, int size)
void minisat_sort(int *array, int size, int(*comp)(const void *, const void *))