diff --git a/src_main/containers/pimap.h b/src_main/containers/pimap.h index 9b6333b9..c1b053a7 100644 --- a/src_main/containers/pimap.h +++ b/src_main/containers/pimap.h @@ -38,21 +38,36 @@ __PIVECTOR_SIMPLE_TYPE__(T) template void piQuickSort(T * a, ssize_t N) { if (N < 1) return; - ssize_t i = 0, j = N; - T & p(a[N >> 1]); - do { - while (a[i] < p) i++; - while (a[j] > p) j--; - if (i <= j) { - if (i != j) { - //piCout << "swap" << i << j << a[i] << a[j]; - piSwapBinary(a[i], a[j]); + if (N < 47) { + T tmp; + ssize_t i,j; + for(i=1; i=0) + { + a[j+1] = a[j]; + j = j-1; } - i++; j--; + a[j+1] = tmp; } - } while (i <= j); - if (j > 0) piQuickSort(a, j); - if (N > i) piQuickSort(a + i, N - i); + } else { + ssize_t i = 0, j = N; + T & p(a[N >> 1]); + do { + while (a[i] < p) i++; + while (a[j] > p) j--; + if (i <= j) { + if (i != j) { + //piCout << "swap" << i << j << a[i] << a[j]; + piSwapBinary(a[i], a[j]); + } + i++; j--; + } + } while (i <= j); + if (j > 0) piQuickSort(a, j); + if (N > i) piQuickSort(a + i, N - i); + } } template