сортировка слиянием java



Автор Rufusnone задал вопрос в разделе Другие языки и технологии

Сортировка вставками и сортировка слиянием! и получил лучший ответ

Ответ от Николай Веселуха[гуру]
// сортировка вставками
#include <iostream>
using namespace std;
void insertion_sort(int *, const size_t);
void show_vector(int *, const size_t);
int main() {
   int vector[] = { 9,5,3,1,6,7,4,8,2 };
   size_t size = sizeof(vector) / sizeof(int);
   locale::global(locale(""));
   cout << " Исходный массив: ";
   show_vector(vector, size);
   insertion_sort(vector, size);
   cout << " Отсортированный массив: ";
   show_vector(vector, size);
   cin.get(); cin.get();
   return 0;
}
void insertion_sort(int * _vector, const size_t _size) {
   int temp;
   rsize_t m;
   for (rsize_t n = 1; n < _size; n++) {
      temp = _vector[n];
      m = n - 1;
      while (m >= 0 && _vector[m] > temp) {
         _vector[m + 1] = _vector[m];
         --m;
      }
      _vector[m + 1] = temp;
   }
}
void show_vector(int * _vector, const size_t _size) {
   for (rsize_t n = 0; n < _size; n++) cout << _vector[n] << ' ';
   cout << endl;
}
// сортировка слиянием
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void merge_sort(int *, size_t, size_t);
void merge(int *, size_t, size_t, size_t);
void test_array(int *, size_t);
int main() {
   int a[] = { 2, 7, 8, 3, 9, 4, 5, 1, 6 };
   size_t size = sizeof(a) / sizeof(int);
   test_array(a, size);
   merge_sort(a, 0, size - 1);
   test_array(a, size);
   _getch();
   return 0;
}
void test_array(int * _array, size_t _size){
   size_t n;
   for (n = 0; n < _size; n++) printf("%3i", _array[n]);
   printf("
");
}
void merge_sort(int * _array, size_t _left, size_t _rigth) {
   size_t middle;
   if (_left < _rigth) {
      middle = (_left + _rigth) / 2;
      merge_sort(_array, _left, middle);
      merge_sort(_array, middle + 1, _rigth);
      merge(_array, _left, middle, _rigth);
   }
}
void merge(int * _array, size_t _left, size_t _middle, size_t _rigth) {
   size_t pos_1 = _left, pos_2 = _middle + 1, pos_3 = 0, size = _rigth - _left + 1;
   int * temp = (int *)calloc(size, sizeof(int));
   if (temp) {
      while (pos_1 <= _middle && pos_2 <= _rigth)
         if (_array[pos_1] < _array[pos_2]) temp[pos_3++] = _array[pos_1++];
         else temp[pos_3++] = _array[pos_2++];
      while (pos_2 <= _rigth) temp[pos_3++] = _array[pos_2++];
      while (pos_1 <= _middle) temp[pos_3++] = _array[pos_1++];
      for (pos_3 = 0; pos_3 < size; pos_3++) _array[_left + pos_3] = temp[pos_3];
      free(temp);
   } else exit(EXIT_FAILURE);
}
А уж со временем и подсчётом сам...
Источник: http://otvet.mail.ru/answer/439873033
Николай Веселуха
Высший разум
(188205)
У меня Visual C++ 2010 и слияние написано на Си, а вставки на С++
Не могу сказать почему такое неадекватное поведение.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Сортировка вставками и сортировка слиянием!
Сортировка слиянием на Википедии
Посмотрите статью на википедии про Сортировка слиянием
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*