Занятие 6. Справочник
Занятие 6. Справочник
Сортировка слиянием
Дополнительный массив на уровне класса.
Дополнительный массив на уровне класса.
static int[] tmpArray = new int[100000]; //100000 - из ограниченийФункция слияния
static void merge( int [] a, int leftPos, int rightPos, int rightEnd ) { int leftEnd = rightPos - 1; int tmpPos = leftPos; int numElements = rightEnd - leftPos + 1; while(leftPos <= leftEnd && rightPos <= rightEnd) if( a[leftPos] <= a[rightPos]) tmpArray[tmpPos++] = a[leftPos++]; else tmpArray[tmpPos++] = a[rightPos++]; //копируем оставшиеся части while(leftPos <= leftEnd) tmpArray[tmpPos++] = a[leftPos++]; while(rightPos <= rightEnd) tmpArray[tmpPos++] = a[rightPos++]; // Копируем tmpArray обратно for(int i = 0; i < numElements; i++) { a[rightEnd] = tmpArray[rightEnd]; rightEnd--; } }Сама функция сортировки
static void mergeSort(int [] a, int left, int right) { if(left < right) { int center = (left + right) / 2; mergeSort(a, left, center); mergeSort(a, center + 1, right); merge(a, left, center + 1, right); } }