Предисловие: Первоначальная идея влюбиться в Java никогда не была забыта: «Делясь результатами своего обучения, независимо от того, насколько глубоки будущие технологии, важно заложить хороший фундамент».
Класс инструмента Swapper, этот класс инструмента будет использоваться в последующих алгоритмах:
Скопируйте код кода следующим образом:
пакет com.meritit.sortord.util;
/**
* Одна утилита для замены двух элементов массива.
*
* @author ysjian
* @версия 1.0
* @электронная почта [email protected]
* @QQ 646633781
* @телефон 18192235667
* @csdnBlog http://blog.csdn.net/ysjian_pingcx
* @createTime 20 декабря 2013 г.
* @copyRight Мерит
*/
публичный класс Swapper {
частныйсвоппер() {
}
/**
* Поменять местами два элемента массива
*
* @param oneIndex
* один индекс
* @param другойИндекс
* другой индекс
* массив @param
* массив, который нужно поменять местами
* @Exception NullPointerException
* если массив равен нулю
*/
public static <T расширяет Comparable<T>> void swap(int oneIndex,
intotherIndex, массив T[]) {
если (массив == ноль) {
throw new NullPointerException("Ввод нулевого значения");
}
checkIndexs(oneIndex,otherIndex, array.length);
Т темп = массив [oneIndex];
массив[oneIndex] = массив[anotherIndex];
массив [anotherIndex] = темп;
}
/**
* Поменять местами два элемента массива
*
* @param oneIndex
* один индекс
* @param другойИндекс
* другой индекс
* массив @param
* массив, который нужно поменять местами
* @Exception NullPointerException
* если массив равен нулю
*/
public static void swap(int oneIndex, intotherIndex, int[] array) {
если (массив == ноль) {
throw new NullPointerException("Ввод нулевого значения");
}
checkIndexs(oneIndex,otherIndex, array.length);
int temp = массив [oneIndex];
массив[oneIndex] = массив[anotherIndex];
массив [anotherIndex] = темп;
}
/**
* Проверьте индекс, есть ли он в списке
*
* @param oneIndex
* один индекс
* @param другойИндекс
* другой индекс
* @param arrayLength
* длина массива
* @Exception IllegalArgumentException
* если индекс выходит за пределы диапазона
*/
Private static void checkIndexs(int oneIndex, intotherIndex,
int arrayLength) {
if (oneIndex < 0 ||otherIndex < 0 || oneIndex >= arrayLength
|| другойИндекс >= длина массива) {
выдать новое IllegalArgumentException(
"illigalArguments для двух индексов [" + oneIndex + ","
+ oneIndex + "]");
}
}
}
Сортировка прямой вставкой, InsertionSortord:
Скопируйте код кода следующим образом:
пакет com.meritit.sortord.insertion;
/**
* Порядок сортировки вставками, временная сложность O(n2)
*
* @author ysjian
* @версия 1.0
* @электронная почта [email protected]
* @QQ 646633781
* @телефон 18192235667
* @csdnBlog http://blog.csdn.net/ysjian_pingcx
* @createTime 31 декабря 2013 г.
* @copyRight Мерит
* @с версии 1.5
*/
общественный класс InsertionSortord {
частный статический окончательный InsertionSortord INSTANCE = новый InsertionSortord();
частный InsertionSortord() {
}
/**
* Получите экземпляр InsertionSortord, только один экземпляр.
*
* @return единственный экземпляр
*/
общественный статический InsertionSortord getInstance() {
вернуть ЭКЗЕМПЛЯР;
}
/**
* Сортировка массива <code>int</code> с порядком сортировки вставкой.
*
* массив @param
* массив целых чисел
*/
общественная недействительность doSort (int... массив) {
if (массив!= null && array.length > 0) {
длина int = array.length;
// обращение начинается с 1, значение индекса 0 является справочным
for (int i = 1; i < length; i++) {
если (массив[i] <массив[i - 1]) {
// если значение по индексу i меньше значения по индексу i-1
int vacancy = i // записываем вакансию как i;
// устанавливаем часового в качестве значения по индексу i
int Sentry = массив [я];
// обращение ключей из индекса i-1,
for (int j = i - 1; j >= 0; j--) {
if (массив[j] > часовой) {
/*
* если текущее значение индекса превышает
* часовой, затем двигаться назад, установить запись нового
*вакансия j
*/
массив[j + 1] = массив[j];
вакансия = j;
}
}
// устанавливаем часового на новую вакансию
массив [вакансия] = часовой;
}
}
}
}
/**
* Сортировка массива общих <code>T</code> с порядком сортировки вставкой.
*
* массив @param
* массив общих
*/
public <T расширяет Comparable<T>> void doSortT(T[] array) {
if (массив!= null && array.length > 0) {
длина int = array.length;
for (int i = 1; i < length; i++) {
если (массив[i].compareTo(массив[i - 1]) <0) {
Т часовой = массив [я];
int вакансия = я;
for (int j = i - 1; j >= 0; j--) {
если (массив[j].compareTo(sentry) > 0) {
массив[j + 1] = массив[j];
вакансия = j;
}
}
массив [вакансия] = часовой;
}
}
}
}
}
Тестовый тестInsertionSortord:
Скопируйте код кода следующим образом:
пакет com.meritit.sortord.insertion;
импортировать java.util.Arrays;
/**
* Тестовый порядок сортировки вставки.
*
* @author ysjian
* @версия 1.0
* @электронная почта [email protected]
* @QQ 646633781
* @телефон 18192235667
* @createTime 31 декабря 2013 г.
* @copyRight Мерит
*/
общественный класс TestInsertionSortord {
public static void main(String[] args) {
ВставкаСорторд InsertSort = ВставкаСорторд.getInstance();
int[] массив = { 3, 5, 4, 2, 6 };
System.out.println(Arrays.toString(массив));
InsertSort.doSort(массив);
System.out.println(Arrays.toString(массив));
System.out.println("---------------");
Целое число [] массив1 = { 3, 5, 4, 2, 6 };
System.out.println(Arrays.toString(array1));
InsertSort.doSortT(массив1);
System.out.println(Arrays.toString(array1));
}
}