40 Left = left; Right = right;
41 pivot = key[(left + right) / 2];
43 while (key[Left] < pivot) Left++;
44 while (pivot < key[Right]) Right--;
45 if (Left >= Right)
break;
46 Swap<T>(&key[Left], &key[Right]);
49 if (left < Left-1) QuickSort<T>(key, left, Left-1);
50 if (Right+1 < right) QuickSort<T>(key, Right+1, right);
61template <
typename T,
typename T2>
66 Left = left; Right = right;
67 pivot = key[(left + right) / 2];
69 while (key[Left] < pivot) Left++;
70 while (pivot < key[Right]) Right--;
71 if (Left >= Right)
break;
72 Swap<T>(&key[Left], &key[Right]);
73 Swap<T2>(&sub[Left], &sub[Right]);
76 if (left < Left-1) QuickSort<T, T2>(key, sub, left, Left-1);
77 if (Right+1 < right) QuickSort<T, T2>(key, sub, Right+1, right);
90template <
typename T,
typename T2,
typename T3>
91void QuickSort(T *key, T2 *sub, T3 *sub2,
int left,
int right)
95 Left = left; Right = right;
96 pivot = key[(left + right) / 2];
98 while (key[Left] < pivot) Left++;
99 while (pivot < key[Right]) Right--;
100 if (Left >= Right)
break;
101 Swap<T>(&key[Left], &key[Right]);
102 Swap<T2>(&sub[Left], &sub[Right]);
103 Swap<T3>(&sub2[Left], &sub2[Right]);
106 if (left < Left-1) QuickSort<T, T2, T3>(key, sub, sub2, left, Left-1);
107 if (Right+1 < right) QuickSort<T, T2, T3>(key, sub, sub2, Right+1, right);
121 Left = left; Right = right;
122 pivot = key[(left + right) / 2];
124 while (key[Left] > pivot) Left++;
125 while (pivot > key[Right]) Right--;
126 if (Left >= Right)
break;
127 Swap<T>(&key[Left], &key[Right]);
130 if (left < Left-1) QuickSortDesc<T>(key, left, Left-1);
131 if (Right+1 < right) QuickSortDesc<T>(key, Right+1, right);
142template <
typename T,
typename T2>
147 Left = left; Right = right;
148 pivot = key[(left + right) / 2];
150 while (key[Left] > pivot) Left++;
151 while (pivot > key[Right]) Right--;
152 if (Left >= Right)
break;
153 Swap<T>(&key[Left], &key[Right]);
154 Swap<T2>(&sub[Left], &sub[Right]);
157 if (left < Left-1) QuickSortDesc<T, T2>(key, sub, left, Left-1);
158 if (Right+1 < right) QuickSortDesc<T, T2>(key, sub, Right+1, right);
171template <
typename T,
typename T2,
typename T3>
176 Left = left; Right = right;
177 pivot = key[(left + right) / 2];
179 while (key[Left] > pivot) Left++;
180 while (pivot > key[Right]) Right--;
181 if (Left >= Right)
break;
182 Swap<T>(&key[Left], &key[Right]);
183 Swap<T2>(&sub[Left], &sub[Right]);
184 Swap<T3>(&sub2[Left], &sub2[Right]);
187 if (left < Left-1) QuickSortDesc<T, T2, T3>(key, sub, sub2, left, Left-1);
188 if (Right+1 < right) QuickSortDesc<T, T2, T3>(key, sub, sub2, Right+1, right);
void QuickSortDesc(T *key, int left, int right)
Sort an array in descending order by the quick sort.
void QuickSort(T *key, int left, int right)
Sort an array by the quick sort.
void Swap(T *a, T *b)
Swap two variables.
The top-level namespace of SenK.