From 0e06a7b00323be4c7a1f468c07ca4fba3b5f2fc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Thu, 24 Jan 2019 14:42:00 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@681 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src_main/containers/pimap.h | 41 +++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 13 deletions(-) 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