introduction sorting techniques c
Списак различитих техника сортирања у језику Ц ++.
Сортирање је техника која се примењује за сређивање података у одређеном редоследу. Сортирање је потребно како би се осигурало да подаци које користимо буду у одређеном редоследу како бисмо лако могли да дођемо до потребних података из гомиле података.
Ако су подаци неуредни и несортирани, када желимо одређену информацију, сваки пут ћемо је морати претраживати једну по једну да бисмо их преузели.
=> Прочитајте серију Еаси Ц ++ Траининг Сериес.
Стога је увек препоручљиво да своје податке држимо уређеним у одређеном редоследу, тако да се проналажење информација, као и друге радње извршене на подацима, могу обављати лако и ефикасно.
Подаци чувамо у облику записа. Сваки запис се састоји од једног или више поља. Када сваки запис има јединствену вредност одређеног поља, називамо га кључним пољем. На пример, у класи Ролл Но може бити јединствено или кључно поље.
скл питања за интервју за 5 година искуства
Податке можемо сортирати у одређеном пољу кључа, а затим их распоредити у растућем / растућем редоследу или у опадајућем / опадајућем редоследу.
Слично томе, у телефонском речнику, сваки запис се састоји од имена особе, адресе и телефонског броја. У овом случају, телефонски број је јединствено или кључно поље. Податке речника можемо сортирати на овом телефонском пољу. Такође можемо податке сортирати нумерички или алфанумерички.
Када можемо прилагодити податке који ће се сортирати у самој главној меморији без потребе за неком другом помоћном меморијом, тада их називамо као Интерно сортирање .
С друге стране, када нам је потребна помоћна меморија за чување посредних података током сортирања, тада технику називамо као Спољно сортирање .
У овом упутству ћемо детаљно научити разне технике сортирања у језику Ц ++.
Шта ћете научити:
Технике сортирања у језику Ц ++
Ц ++ подржава разне технике сортирања како су наведене у наставку.
Буббле Сорт
Буббле сорт је најједноставнија техника у којој упоређујемо сваки елемент са суседним елементом и замењујемо елементе ако нису у реду. На тај начин на крају сваке итерације (која се назива пролаз), најтежи елемент на крају листе се издува.
Доље је дат пример сортирања мехурића.
Низ за сортирање:
Као што се горе види, пошто је реч о малом низу и скоро је сортиран, успели смо да у неколико пролаза добијемо потпуно сортирани низ.
Применимо технику сортирања облачића у језику Ц ++.
#include using namespace std; int main () { int i, j,temp; int a(5) = {10,2,0,43,12}; cout <<'Input list ...
'; for(i = 0; i<5; i++) { cout < Излаз:
Листа уноса…
10 2 0 43 12
Сортирана листа елемената…
0 2 10 12 43
Као што се види из резултата, у техници мехурића сортирања, при сваком пролазу најтежи елемент се мехури до краја низа, чиме се низ у потпуности сортира.
Сортирање избора
Једноставна је, али једноставна за примену техника у којој проналазимо најмањи елемент на листи и постављамо га на своје место. При сваком пролазу, бира се следећи најмањи елемент и поставља се у његов одговарајући положај.
Узмимо исти низ као у претходном примеру и извршимо Сортирање избора да бисмо сортирали овај низ.




Као што је приказано на горњој илустрацији, за Н број елемената узимамо Н-1 пролазе за потпуно сортирање низа. На крају сваког проласка, најмањи елемент у низу поставља се на одговарајуће место у сортираном низу.
Даље, применимо Сортирање избора помоћу Ц ++.
#include using namespace std; int findSmallest (int(),int); int main () { int myarray(5) = {12,45,8,15,33}; int pos,temp; cout<<'
Input list of elements to be Sorted
'; for(int i=0;i<5;i++) { cout< Излаз:
Улазна листа елемената за сортирање
12 45 8 15 33
Сортирана листа елемената је
8 12 15 33 45
У сортирању одабира, при сваком пролазу, најмањи елемент у низу поставља се на одговарајући положај. Стога на крају процеса сортирања добијамо потпуно сортирани низ.
Сортирање уметања
Сортирање уметања је техника у којој почињемо од другог елемента листе. Други елемент упоређујемо са претходним (1ст) елемент и поставите га на одговарајуће место. У следећем пролазу, за сваки елемент, упоређујемо га са свим претходним елементима и убацујемо тај елемент на одговарајуће место.
Горе наведене три технике сортирања су једноставне и једноставне за примену. Ове технике се добро изводе када је величина листе мања. Како листа расте, ове технике се не обављају ефикасно.
Техника ће бити јасна разумевањем следеће илустрације.
Низ који ће се сортирати је следећи:

Сада за сваки пролаз упоређујемо тренутни елемент са свим претходним елементима. Тако у првом додавању започињемо са другим елементом.

Дакле, потребан нам је Н број пролаза да бисмо у потпуности сортирали низ који садржи Н број елемената.
Применимо технику сортирања уметања користећи Ц ++.
#include using namespace std; int main () { int myarray(5) = { 12,4,3,1,15}; cout<<'
Input list is
'; for(int i=0;i<5;i++) { cout < Излаз:
Листа уноса је
12 4 3 1 15
Сортирана листа је
1 3 4 12 15
Горњи излаз приказује комплетни сортирани низ помоћу сортирања уметања.
Брзо сортирање
Куицксорт је најефикаснији алгоритам који се може користити за сортирање података. Ова техника користи стратегију „подели и освоји“ у којој је проблем подељен на неколико потпроблема и након појединачног решавања ових подпроблема обједињени су за комплетну сортирану листу.
У брзом сортирању прво поделимо листу око пивот елемента, а затим поставимо остале елементе на одговарајуће положаје у складу са пивот елементом.

Као што је приказано на горњој илустрацији, у Куицксорт техници делимо низ око пивот елемента тако да су сви елементи мањи од пивота лево од њих који су од већих од пивота десно. Затим узимамо ова два низа независно и сортирамо их, а затим придружујемо или освајамо да бисмо добили резултатски сортирани низ.
Кључ Куицксорт-а је избор пивот елемента. То може бити први, последњи или средњи елемент низа. Први корак након избора пивот елемента је постављање пивота у његов исправан положај како бисмо могли да поделимо низ на одговарајући начин.
Применимо технику брзог сортирања користећи Ц ++.
#include using namespace std; // Swap two elements - Utility function void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } // partition the array using last element as pivot int partition (int arr(), int low, int high) { int i = (low - 1); for (int j = low; j <= high- 1; j++) { //if current element is smaller than pivot, increment the low element //swap elements at i and j if (arr(j) <= pivot) { i++; // increment index of smaller element swap(&arr(i), &arr(j)); } } swap(&arr(i + 1), &arr(high)); return (i + 1); } //quicksort algorithm void quickSort(int arr(), int low, int high) { if (low < high) { //partition the array int pivot = partition(arr, low, high); //sort the sub arrays independently quickSort(arr, low, pivot - 1); quickSort(arr, pivot + 1, high); } } void displayArray(int arr(), int size) { int i; for (i=0; i < size; i++) cout< Излаз:
Улазни низ
12 23 3 43 51
Низ сортиран са Куицксорт
3 12 23 43 51
У горњој имплементацији брзог сортирања, имамо партицијску рутину која се користи за раздвајање улазног низа око пивот елемента који је последњи елемент у низу. Затим позивамо рутину брзог сортирања рекурзивно да појединачно сортирамо под-низове како је приказано на илустрацији.
Сортирање спајањем
Ово је још једна техника која користи стратегију „Подели и освоји“. У овој техници листу прво делимо на једнаке половине. Затим изводимо технику сортирања спајањем на овим листама независно, тако да се обе листе сортирају. На крају обједињујемо обе листе да бисмо добили потпуну сортирану листу.
Сортирање обједињавањем и брзо сортирање брже је од већине других техника сортирања. Њихове перформансе остају нетакнуте чак и када листа постане већа.
Погледајмо илустрацију технике спајања сортирања.

На горњој илустрацији видимо да техника сортирања спајањем подељује изворни низ у више наврата све док у сваком поднизу нема само један елемент. Једном када се то уради, поднизови се затим сортирају независно и спајају заједно да би се формирао комплетан сортирани низ.
Даље, применимо Мерге Сорт користећи језик Ц ++.
#include using namespace std; void merge(int *,int, int , int ); void merge_sort(int *arr, int low, int high) { int mid; if (low num; cout<<'Enter '<myarray(i); } merge_sort(myarray, 0, num-1); cout<<'Sorted array
'; for (int i = 0; i < num; i++) { cout< Излаз:
Унесите број елемената за сортирање: 5
Унесите 5 елемената за сортирање: 10 21 47 3 59
Сортирани низ
3 10 21 47 59
Схелл Сорт
Сортирање љуске је продужетак технике сортирања уметања. У сортирању уметањем бавимо се само следећим елементом, док у сортирању љуске обезбеђујемо прираштај или празнину помоћу које креирамо мање листе од родитељске листе. Елементи у подлистима не морају бити суседни, већ су обично раздвојени у „празнини_вредности“.
Сортирање љуске изводи се брже од сортирања Уметање и захтева мање потеза од сортирања Уметање.

Ако пружимо празнину од, тада ћемо имати следеће под-листе са сваким елементом који је раздвојен по 3 елемента.
Затим сортирамо ове три подлисте.

Горњи низ који смо добили након спајања разврстаних под-низова је скоро сортиран. Сада можемо извршити сортирање уметања на овом низу да бисмо сортирали читав низ.

Тако видимо да када једном поделимо низ на подлисте користећи одговарајући прираштај, а затим их спојимо, добијамо готово сортирану листу. Техника сортирања уметања на овој листи може се извршити и низ се сортира у мање потеза од оригиналне сорте уметања.
Доље је дата примена Схелл Сорт у Ц ++.
#include using namespace std; // shellsort implementation int shellSort(int arr(), int N) { for (int gap = N/2; gap > 0; gap /= 2) { for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } int main() { int arr() = {45,23,53,43,18}; //Calculate size of array int N = sizeof(arr)/sizeof(arr(0)); cout << 'Array to be sorted:
'; for (int i=0; i Излаз:
Низ за сортирање:
45 23 53 43 18
Низ након сортирања љуске:
18 23 43 45 53
Сортирање шкољке тако делује као огроман напредак у односу на сортирање уметања и чак не узима пола броја корака за сортирање низа.
Хеап Сорт
Хеапсорт је техника у којој се за сортирање листе користи структура података гомиле (мин-хеап или мак-хеап). Прво конструишемо хрпу са несортиране листе и такође користимо хрпу за сортирање низа.
Хеапсорт је ефикасан, али није тако брз или сортирање стапања.

Као што је приказано на горњој илустрацији, прво конструишемо максималну хрпу од елемената низа који ће се сортирати. Затим пређемо гомилу и заменимо последњи и први елемент. Тренутно је последњи елемент већ сортиран. Затим поново конструишемо максималну гомилу од преосталих елемената.
Поново пређите гомилу и замените први и последњи елемент и додајте последњи елемент на сортирану листу. Овај поступак се наставља све док у хрпи не остане само један елемент који постаје први елемент сортиране листе.
Хајде да сада имплементирамо Хеап Сорт користећи Ц ++.
#include using namespace std; // function to heapify the tree void heapify(int arr(), int n, int root) { int largest = root; // root is the largest element int l = 2*root + 1; // left = 2*root + 1 int r = 2*root + 2; // right = 2*root + 2 // If left child is larger than root if (l arr(largest)) largest = l; // If right child is larger than largest so far if (r arr(largest)) largest = r; // If largest is not root if (largest != root) { //swap root and largest swap(arr(root), arr(largest)); // Recursively heapify the sub-tree heapify(arr, n, largest); } } // implementing heap sort void heapSort(int arr(), int n) { // build heap for (int i = n / 2 - 1; i >= 0; i--) heapify(arr, n, i); // extracting elements from heap one by one for (int i=n-1; i>=0; i--) { // Move current root to end swap(arr(0), arr(i)); // again call max heapify on the reduced heap heapify(arr, i, 0); } } /* print contents of array - utility function */ void displayArray(int arr(), int n) { for (int i=0; i Излаз:
Улазни низ
4 17 3 12 9
Сортирани низ
3 4 9 12 17
До сада смо укратко разговарали о свим главним техникама сортирања са илустрацијом. Сваку од ових техника детаљно ћемо научити у нашим наредним водичима, заједно са разним примерима за разумевање сваке технике.
Закључак
Сортирање је потребно како би подаци били сортирани и у правилном редоследу. Приступ несортираним и неуредним може потрајати дуже, што може утицати на перформансе читавог програма. Дакле, за све операције повезане са подацима попут приступа, претраживања, манипулације итд., Потребно је да се подаци сортирају.
У програмирању се користи много техника сортирања. Свака техника се може користити у зависности од структуре података коју користимо или времена које алгоритам узима за сортирање података или простора меморије који алгоритам узима за сортирање података. Техника коју користимо такође зависи од тога коју структуру података сортирамо.
Технике сортирања нам омогућавају сортирање структура података у одређеном редоследу и распоређивање елемената у растућем или силазном редоследу. Видели смо технике сортирања попут Буббле сорт, Селецтион сорт, Инсертион сорт, Куицксорт, Схелл сорт, Мерге сорт и Хеап сорт. Сортирање мехурића и сортирање избора једноставније је и једноставније за спровођење.
У нашим следећим водичима детаљно ћемо видети сваку од горе поменутих техника сортирања.
=> Кликните овде за бесплатни курс Ц ++.
Препоручено читање
- Сортирање гомиле у Ц ++ са примерима
- Споји сортирање у Ц ++ са примерима
- Сортирање уметања у Ц ++ са примерима
- ЈМетер Видео 1: Увод, ЈМетер преузимање и инсталирање
- Увод у програмски језик Јава - Видео водич
- Питхон процес увођења и инсталације
- Уник наредба за сортирање са синтаксом, опцијама и примерима
- МонгоДБ метода сортирања () са примерима