Merge - это объединение двух (или более двух) упорядоченных таблиц в новую упорядоченную таблицу, то есть разделить последовательность, которая будет отсортирована на несколько последующих последствий, каждая последующая последовательность упорядочена. Затем упорядоченные последующие последствия объединяются в общую упорядоченную последовательность.
Сортировка слияния - это эффективный алгоритм сортировки, основанный на операции слияния. Этот алгоритм является очень типичным применением разделения и завоевания. Объедините упорядоченные последующие последствия, чтобы получить полностью упорядоченную последовательность; Если две заказанные таблицы объединены в одну упорядоченную таблицу, это называется 2-й пустого слияния.
Алгоритм сортировки слияния является стабильным не адаптивно и не требует данных.
Как это работает:
1. Подайте заявку на пространство так, чтобы его размер была суммой двух отсортированных последовательностей, которая используется для хранения комбинированных последовательностей
2. Установите два указателя, начальные позиции представляют собой начальные позиции двух отсортированных последовательностей соответственно.
3. Сравните элементы, указанные двумя указателями, выберите относительно небольшие элементы и поместите их в пространство слияния и переместите указатель в следующую позицию
4. Повторите шаг 3, пока указатель не достигнет конца последовательности
5. Скопируйте все оставшиеся элементы другой последовательности непосредственно до конца объединенной последовательности
Запустите код
Кода -копия выглядит следующим образом:
пакет com.zc.manythread;
импортировать java.util.random;
/**
* Заказ
* @author я
*
*/
открытый класс Mergesort {
public static void mergesort (int [] data) {
Sort (Data, 0, data.length - 1);
}
Public Static Void Sort (int [] Данные, int left, int right) {
if (слева> = справа)
возвращаться;
// Найти промежуточный индекс
int center = (слева + справа) / 2;
// рекурсив левой массивы
сортировка (данные, слева, в центре);
// рекурсив правый массив
сортировка (данные, центр + 1, справа);
// слияние
слияние (данные, слева, центр, справа);
print (data);
}
/**
* Объединить два массива, объединить первые два массива в порядке и все еще заказывать после слияния
*
* @param данные
* Array Object
* @param ушел
* Индекс первого элемента левого массива
* @param Center
* Индекс последнего элемента левой массивы, Центр+1 является индексом первого элемента правого массива
* @param верно
* Индекс последнего элемента правого массива
*/
Public Static Void Merge (int [] Данные, int left, int center, int right) {
// временный массив
int [] tmparr = new int [data.length];
// Индекс первого элемента правого массива
int mid = center + 1;
// третий записывает индекс временного массива
int third = Left;
// кэшировать индекс первого элемента левого массива
int tmp = слева;
while (слева <= center && mid <= справа) {
// Уберите самый маленький из двух массивов и положите его во временный массив
if (data [слева] <= data [mid]) {
tmparr [third ++] = data [Left ++];
} еще {
tmparr [third ++] = data [mid ++];
}
}
// Поместите оставшиеся части во временный массив, в свою очередь (на самом деле, только один из них будет выполнен)
while (mid <= справа) {
tmparr [third ++] = data [mid ++];
}
while (слева <= центр) {
tmparr [third ++] = data [Left ++];
}
// скопировать содержимое временного массива обратно в исходный массив
// (содержание оригинального левого правого диапазона копируется обратно в исходный массив)
while (tmp <= справа) {
data [tmp] = tmparr [tmp ++];
}
}
public static void print (int [] data) {
для (int i = 0; i <data.length; i ++) {
System.out.print (data [i] + "/t");
}
System.out.println ();
}
/**
* Генерировать случайный массив
* @param count
* @возвращаться
*/
private static int [] censue (int count) {
int [] data = new int [count];
Случайный rand = new Random ();
Boolean [] bool = new Boolean [100];
int num = 0;
для (int i = 0; i <count; i ++) {
делать {
// Если сгенерированное число одинаково, продолжайте цикл
num = rand.nextint (100);
} while (bool [num]);
bool [num] = true;
data [i] = num;
}
вернуть данные;
}
public static void main (string [] args) {
int [] data = cantureate (10);
print (data);
Mergesort (data);
System.out.println ("отсортированный массив:");
print (data);
}
}
Результаты работы:
Выше приведено в этой статье, я надеюсь, что вам это может понравиться.