Введение в принципы быстрой сортировки
Быстрая сортировка - это обновление сортировки пузырьков, которую мы узнали раньше. Все они принадлежат к обмену сортировкой, и все они используют постоянное сравнение и движение для достижения сортировки. Быстрая сортировка - это очень эффективный алгоритм сортировки. Его реализация увеличивает расстояние между сравнением и перемещением записей и перемещает записи с большими ключевыми словами непосредственно от фронта к спине, и записи с меньшими ключевыми словами непосредственно с задней части, тем самым уменьшая общее количество сравнений и движений. В то же время идея «деления и завоевания» принята, чтобы разделить большие на маленькие и маленькие на мелкие. Принцип заключается в следующем: для данного набора записей выберите контрольный элемент, обычно выбирается первый элемент или последний элемент, и через сканирование последовательность, которая будет отсортирована, делится на две части, часть меньше, чем контрольный элемент, и часть, превышающая или равна элементу эталона. В настоящее время контрольный элемент находится в правильном положении после его отсортирования, а затем две части рекурсивно отсортированы одинаково, пока не будут упорядочены все записи в последовательности.
1. наименьшее количество k
Введите n номеров, чтобы найти наименьшие числа K, например, введите 4,5,1,6,2,7,3,8, а наименьшее число составляет 1,2,3,4
Основываясь на O (n), эта проблема может быть решена с помощью функции партии. Если номер KTH массива корректируется на основе номера KTH, так что все числа, меньшие, чем номер KTH, расположены слева от массива, а все числа, больше, чем массив KTH, расположены справа от массива. После корректировки цифры k слева от массива являются самыми маленькими цифрами K, которые не обязательно упорядочены.
Импорт java.util.scanner; открытый класс Main {public static void main (string [] args) {scanner in = new Scanner (System.in); int n = in.nextint (); int k = in.nextint (); int [] num = nem [n]; int [] out = int [k]; for (); i = 0; i <n; i ++) {num [i] = in.nextint ();} boolean b = getmink (n, num, k, out); if (b) {for (int i = 0; i <k; i ++) {System.out.print (out [i]+"");}}} public static boolean getMink (int uiin pinpu int uik, int [] poutputarray) {if (pinputarray == null || poutputarray == null || uik> uiinputnum || uiinputnum <= 0 || uik <= 0) {return false;} int start = 0; int end = uiinputnum-1; int index = partition (pinputArray, end); while (index! = uik-1) {if (index> uik-1) {// индекс находится на правой стороне k-1 end = index-1; index = printition (pinputarray, start, end);} els i = 0; i <uik; i ++) {poutputarray [i] = pinputarray [i];} return true;} // Функция разделения разделения Возвращает значение индекса быстрой строки первого элемента массива. j = end; while (i <j) {while (i <j && privot <= a [j]) {j-;} swap (a, i, j); while (i <j && privot> = a [i]) {i ++;} swap (a, i, j);} return i;} public static void swap (int [] a, int i, int j) {int t = a [i]; a [i] = a [j]; a [j] = t;}} 2. Числа с более чем половиной событий в массиве
В массиве есть число, которое появляется более половины длины массива. Пожалуйста, найдите этот номер. Например, 1, 2, 3, 2, 2, 5, 4, 2, номер 2 появляется в массиве 5 раз, превышающая половину длины массива, выход 2
Вдохновленный быстрым сортировкой, в быстром сортировке, теперь выберите номер в массиве, а затем отрегулируйте порядок чисел в массиве, чтобы цифры меньше выбранного числа ранжированы слева от его левой стороны, а числа больше, чем выбранное число, ранжированы справа.
Если подписка выбранного номера оказался N/2, то это число является медианным номером в массиве
Импорт java.util.scanner; открытый класс Main {public static void main (string [] args) {scanner in = new Scanner (System.in); int n = in.nextint (); int [] num = new int [n]; для (int i = 0; i <n; i ++) {num] = in. b = gethalfnum (n, num); if (b! = -1) {System.out.println (b);}} public static int gethalfnum (int uiinputnum, int [] pinputArray) {if (pinputarray == null || uiinputnum <= 0) {return -1;} inted = ui middle = UIIN/uiIn; start = 0; int end = uiinputnum-1; int index = раздел (pinputarray, start, end); while (index! = middle) {// Если он не равен половине длины, это означает, что медиана не найдена, если (index> middle) {end = index-1; index = pintition (pinputarray, start, end);} else {start = index+1; index = pristition (pinputarray, start, end);} retember pinputArray [index]; раздел (int [] a, int start, int end) {int privot = a [start]; int i = start; int j = end; while (i <j) {while (i <j && privot <= a [j]) {j-;} swap (a, i, j); while (i <j & privot> = a [i]) {i ++;} swap (a, i, j);} return i;} public static void swap (int [] a, int i, int j) {int t = a [i]; a [i] = a [j]; a [j] = t;}}; 3. Найдите наименьшее число KTH в массиве
Например, заданный массив 1, 5, 2, 6, 8, 0, 6, 4 -е наименьшее число - 5
импортировать java.util.scanner; открытый класс Main {public static void main (String [] args) {сканер в = новый сканер (System.in); int n = in.nextint (); int k = in.nextint (); int [] num = new int [n]; // int [] out = int [k]; for (int i = 0; i <n; i ++) {num [i] = in.nextint ();} int b = getMink (n, num, k); if (b! =-1) {System.out.println (b);}} public int getmink (int uiinputnum, int [] pinputarray, int, int public int getmink (int uiinputnum, int [] pinputarray, int, inttatic int getmink uik) {if (pinputArray == null || uik> uiinputnum || uiinputnum <= 0 || uik <= 0) {return -1;} int start = 0; int end = uiinputnum -1; int index = printition (pinputArray, ind, end); while (index! = uik-1) {// Если индекс не является положением k-1 if (index> uik-1) {end = index-1; index = раздел (pinputArray, start, end);} else {start = index+1; index = раздел (pinputArray, ind, end);} return pinputArray [index]; раздел (int [] a, int start, int end) {int privot = a [start]; int i = start; int j = end; while (i <j) {while (i <j && privot <= a [j]) {j-;} swap (a, i, j); while (i <j & privot> = a [i]) {i ++;} swap (a, i, j);} return i;} public static void swap (int [] a, int i, int j) {int t = a [i]; a [i] = a [j]; a [j] = t;}};Суммировать
Выше приведено все содержание этой статьи о примере кода трех вопросов алгоритма, основанного на быстрой сортировке программирования Java. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!