Въведение
Сортирането е основна операция в компютърните науки, която включва подреждане на елементи в определен ред, като например цифров или азбучен ред. Разработени са различни алгоритми за сортиране, всеки с индикатори за време и ефективност. Сортирането по линейно време е подмножество от алгоритми за сортиране със значително предимство: те могат да сортират даден набор от елементи в линейно време, времето за изпълнение се увеличава линейно с размера на входа.
Най-известният алгоритъм за линейно сортиране по време е низходящото сортиране. Изчислителното сортиране е особено ефективно, когато обхватът на входните елементи е известен и сравнително малък. Това елиминира необходимостта от сравняване на елементи, основната отнемаща време операция в много други алгоритми за сортиране. Използвайки знания за входна област, изчислителното сортиране постига линейна времева сложност. Числовото сортиране първо сканира входния масив, за да определи броя на всеки елемент. След това използва тези числа, за да изчисли правилните позиции на елементите в подредената таблица с резултати. Алгоритъмът се състои от следните стъпки:
- За да определите диапазона, идентифицирайте минималната и максималната стойност на входния масив.
- Създайте работен лист, инициализиран с размера на диапазона и нули.
- Обходете входния масив и увеличете всеки намерен елемент.
- Променете работния лист, като изчислите кумулативната сума, за да получите правилните позиции за всеки елемент.
- Създайте изходен масив със същия размер като входния масив.
- Преместете отново входния масив, като поставите всеки елемент в правилната позиция в изходния масив въз основа на работния лист.
- Таблицата с резултати вече съдържа сортирани елементи.
Основното предимство на низходящото сортиране е, че постига линейна времева сложност от O(n), което го прави много ефективен за големи входни размери. Неговата приложимост обаче е ограничена до сценарии, при които изборът на входни елементи е известен предварително и е относително малък.
конвертиране на int в низ java
Важно е да се отбележи, че други алгоритми за сортиране, като бързо сортиране или сливане, обикновено имат времева сложност O(n log n), което се счита за ефективно за много практически приложения. Алгоритмите за линейно сортиране на времето, като числено сортиране, предоставят алтернатива, когато определени ограничения или свойства на входа позволяват да се използва линейна времева сложност.
История
Алгоритмите за линейно сортиране на време имат богата история в компютърните науки. Развитието на линейния времеви ред може да бъде проследено до средата на 20-ти век и приносът на учени и математици е значителен. Един от най-ранните алгоритми за линейно сортиране във времето е сортирането по кофа, предложено от Харолд Х. Сюърд през 1954 г. Сортирането по кофа разделя входните елементи на краен брой кофи и след това сортира всяка кофа поотделно. Този алгоритъм има линейна времева сложност, ако разпределението на входните елементи е относително равномерно.
През 1959 г. Кенет Е. Айвърсън въвежда радикален алгоритъм, който постига линейна времева сложност. Radix сортира елементите по техните номера или знаци от най-малко значими към най-значими. Той използва стабилни алгоритми за сортиране, като числово или групово сортиране, за сортиране на елементите на всяко място на цифра. Сортирането по Radix стана популярно в ерата на перфокартите и ранните компютърни системи. Въпреки това, най-известният алгоритъм за линейно сортиране по време е изброяването, въведено от Харолд Х. Сюърд и Питър Елиас през 1954 г. и по-късно независимо преоткрито от Харолд Х. „Боби“ Джонсън през 1961 г. Численото сортиране получи значително внимание.
Това е особено ефективно, когато диапазонът от входни елементи е известен и сравнително малък. Историята на линейното сортиране на времето продължи с разработването на други специализирани алгоритми. Например през 1987 г. Ханан Самет предложи сортиране на двоично дърво на разпределение, алгоритъм за линейно сортиране на време за многоизмерни данни. През годините изследователите продължиха да изучават и подобряват линейните алгоритми за планиране, като се фокусираха върху конкретни сценарии и ограничения. Въпреки че алгоритми като бързо сортиране и сливане се използват по-широко поради тяхната ефективност в повече сценарии, алгоритмите за сортиране с линейно време предоставят ценни алтернативи, когато определени обстоятелства позволяват да се използва сложността на линейното време. Като цяло, историята на линейното сортиране във времето се характеризира с търсене на ефективни алгоритми, които могат да сортират големи масиви от данни в линейно време, преодолявайки ограниченията на базираните на сравнение алгоритми за сортиране. Приносът на различни изследователи проправи пътя за разработване и разбиране на тези специализирани техники за сортиране.
Видове линейно сортиране на времето
Има няколко различни алгоритма за линейно сортиране по време. Двата основни типа са базирани на преброяване алгоритми и базирани на радикс алгоритми. Ето най-често срещаните алгоритми за линейно сортиране по време, класифицирани въз основа на следните типове:
Алгоритми, базирани на броене
Алгоритми, базирани на Radix
Предимства на линейното сортиране на времето
Алгоритмите за линейно сортиране по време, като например числово сортиране, предлагат няколко предимства в конкретни сценарии.
Недостатъци на линейното сортиране на времето
Въпреки че линейните алгоритми за планиране имат своите предимства, те също имат определени ограничения и недостатъци:
jsp javatpoint
При избора на алгоритъм за сортиране е важно внимателно да се разгледат спецификите на входните данни и изискванията на проблема за сортиране. Докато линейните алгоритми за планиране предлагат предимства в конкретни сценарии, те само понякога са най-подходящият или ефективен избор.
Приложения на алгоритмите за линейно сортиране по време
Алгоритмите за линейно сортиране на времето са ефективни и имат много приложения в различни области. Ето някои типични приложения на линейния времеви ред:
Внедряване на линейно сортиране по време в C++
Ето пример за програма, прилагаща Counting Sort, която е линеен алгоритъм за сортиране по време:
сортиране на вмъкване
#include #include using namespace std; void countingSort(vector& arr) { // Find the maximum element in the array int max_val = *max_element(arr.begin(), arr.end()); // Create a count array to store the count of each element vector count(max_val + 1, 0); // Count the occurrences of each element for (int num : arr) { count[num]++; } // Compute the prefix sum for (int i = 1; i <count.size(); i++) { count[i] +="count[i" - 1]; } create a sorted output array vector output(arr.size()); place the elements in order for (int i="arr.size()" 1;>= 0; i--) { output[count[arr[i]] - 1] = arr[i]; count[arr[i]]--; } // Copy the sorted elements back to the original array for (int i = 0; i <arr.size(); i++) { arr[i]="output[i];" } int main() vector arr="{4," 2, 8, 3, 1}; sort the array using counting countingsort(arr); print sorted cout << 'sorted array: '; for (int num : arr) ' endl; return 0; < pre> <p> <strong>Sample Output</strong> </p> <pre> Sorted array: 1 2 2 3 3 4 8 </pre> <p>This indicates that the input array has been sorted in ascending order using the Counting Sort algorithm, resulting in the sorted array [1, 2, 2, 3, 3, 4, 8].</p> <p>In this C++ program, the counting sort function takes a reference to the vector arr and runs the counting sort routine. It finds the table's maximum value to determine the worksheet's size. It then counts each element's occurrence and calculates the worksheet's prefix sum. Then, it creates a result vector and puts the elements in order according to the worksheet. Finally, it copies the sorted elements back into the original array. In the primary function, the example array {4, 2, 2, 8, 3, 3, 1} is sorted by the enumeration sort algorithm and printed as a sorted matrix. Note that the program uses libraries to work with vectors and find the maximum element of an array using the max_element function.</p> <hr></arr.size();></count.size();>
Това показва, че входният масив е сортиран във възходящ ред с помощта на алгоритъма за сортиране с броене, което води до сортирания масив [1, 2, 2, 3, 3, 4, 8].
В тази програма на C++ функцията за сортиране с броене взема препратка към вектора arr и изпълнява процедурата за сортиране с броене. Той намира максималната стойност на таблицата, за да определи размера на работния лист. След това отчита появата на всеки елемент и изчислява префиксната сума на работния лист. След това създава резултатен вектор и подрежда елементите в съответствие с работния лист. Накрая той копира сортираните елементи обратно в оригиналния масив. В основната функция примерният масив {4, 2, 2, 8, 3, 3, 1} се сортира от алгоритъма за сортиране чрез изброяване и се отпечатва като сортирана матрица. Имайте предвид, че програмата използва библиотеки за работа с вектори и намиране на максималния елемент от масив с помощта на функцията max_element.