Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Сортировка с помощью выделения (прямого выбора)Стр 1 из 2Следующая ⇒
Сортировка с помощью включения i = 1 44 55 12 42 94 18 06 67 i = 2 44 55 12 42 94 18 06 67 i = 3 12 44 55 42 94 18 06 67 i = 4 12 42 44 55 94 18 06 67 i = 5 12 42 44 55 94 18 06 67 i = 6 12 18 42 44 55 94 06 67 i = 7 06 12 18 42 44 55 94 67 i = 8 06 12 18 42 44 55 67 94 Последовательность на текущий момент. Часть a[0], …, a[4] уже отсортирована. i = 5 12 42 44 55 94 18 06 67 Вставка число 18 в отсортированную последовательность. Пара для сравнения выделена. i = 5 12 42 44 55 94 18 06 67 j = 1 12 42 44 55 18 94 06 67 j = 2 12 42 44 18 55 94 06 67 j = 3 12 42 18 4455 94 06 67 j = 4 12 18 42 44 55 94 06 67 void insertSort(int* a, long size) {int x; long i, j; for(i =0; i < size; i++) // цикл проходов, i - номер прохода { x = a[i]; // поиск места элемента в готовой последовательности for (j = i-1; j > = 0 & & a[j] > x; j--) a[j+1] = a[j]; //сдвигаем элемент направо, пока не дошли a[j+1] = x; // место найдено, вставить элемент }}//// сортировка вставками с барьером ////// void insertSortGuarded(int* a, long size) { int x; long i, j; int backup = a[0]; // сохранить старый первый элемент a[0] = 0xffffffff; // заменить на минимальный // отсортировать массив for (i=1; i < size; i++) { x = a[i]; for (j=i-1; a[j] > x; j--) a[j+1] = a[j]; a[j+1] = x; } // вставить backup на правильное место for (j=1; j< size & & a[j] < backup; j++) a[j-1] = a[j]; a[j-1] = backup; // вставка элемента} Сортировка с помощью выделения (прямого выбора) i = 0 44 55 12 42 94 18 06 67 1 06 55 12 42 94 18 44 67 2 06 12 55 42 94 18 44 67 3 06 12 18 42 94 55 44 67 4 06 12 18 42 94 55 44 67 5 06 12 18 42 44 55 94 67 6 06 12 18 42 44 55 94 67 7 06 12 18 42 44 55 67 94 ////////////// Сортировка выделением //////////////void selectSort(int* a, long size) {int x, minE, minP; long i, j; for(i=0; i < size; i++) { цикл проходов, i-номер прохода x = a[i]; minE = 0x7fffffff; // поиск в остатке минимального элемента и его места for(j = i; j < size; j++) if(a[j] < minE) { minE = a[j]; minP = j; } // место мин найдено, переписываем мин элемент на i-ое место a[i] = minE; a[minP] = x; // на место мин записываем элемент a[i] }} 4. Сортировка с помощью обменов (пузырьковая сортировка)
void bubbleSort(int a[], long size) {long i, j; int x; for(i = 0; i < size; i++) { // i - номер прохода for(j = size-1; j > i; j--) {// внутренний цикл прохода if (a[j-1] > a[j]) { x=a[j-1]; a[j-1]=a[j]; a[j]=x; } } }}
|