git-svn-id: svn://db.shs.com.ru/pip@681 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2019-01-24 14:42:00 +00:00
parent 8ba3d5dc8e
commit 0e06a7b003

View File

@@ -38,21 +38,36 @@ __PIVECTOR_SIMPLE_TYPE__(T)
template<class T>
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<T>(a[i], a[j]);
if (N < 47) {
T tmp;
ssize_t i,j;
for(i=1; i<N; i++) {
tmp = a[i];
j = i-1;
while(tmp<a[j] && j>=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<T>(a[i], a[j]);
}
i++; j--;
}
} while (i <= j);
if (j > 0) piQuickSort(a, j);
if (N > i) piQuickSort(a + i, N - i);
}
}
template <typename Key, typename T>