{"id":27294599,"url":"https://github.com/vitaminvp/sorting-algorithms","last_synced_at":"2025-07-22T17:04:59.413Z","repository":{"id":113146125,"uuid":"266482532","full_name":"Vitaminvp/Sorting-Algorithms","owner":"Vitaminvp","description":"Sorting Algorithms in JavaScript","archived":false,"fork":false,"pushed_at":"2020-05-27T21:22:27.000Z","size":48745,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-11T22:53:31.410Z","etag":null,"topics":["bubble-sort","counting-sort","insertion-sort","kottans","merge-sort","quick-sort","selection-sort","shell-sort","sorting-algorithms"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Vitaminvp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-05-24T06:20:44.000Z","updated_at":"2020-07-06T18:03:42.000Z","dependencies_parsed_at":"2023-07-24T21:30:32.247Z","dependency_job_id":null,"html_url":"https://github.com/Vitaminvp/Sorting-Algorithms","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Vitaminvp/Sorting-Algorithms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vitaminvp%2FSorting-Algorithms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vitaminvp%2FSorting-Algorithms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vitaminvp%2FSorting-Algorithms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vitaminvp%2FSorting-Algorithms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Vitaminvp","download_url":"https://codeload.github.com/Vitaminvp/Sorting-Algorithms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vitaminvp%2FSorting-Algorithms/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266535695,"owners_count":23944275,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bubble-sort","counting-sort","insertion-sort","kottans","merge-sort","quick-sort","selection-sort","shell-sort","sorting-algorithms"],"created_at":"2025-04-11T22:53:30.412Z","updated_at":"2025-07-22T17:04:59.401Z","avatar_url":"https://github.com/Vitaminvp.png","language":"JavaScript","readme":"# Sorting-Algorithms\n\nSorting Algorithms in JavaScript\n + [Bubble sort](#bubbleSort)\n + [Selection Sort](#selectionSort)\n + [Insertion Sort](#insertionSort)\n + [Merge Sort](#mergeSort)\n + [Quick Sort](#quickSort)\n + [Shell Sort](#shellSort)\n + [Counting Sort](#сountingSort)\n + [Comb Sort](#combSort)\n\n\n## Bubble sort\n\n\u003ca name=\"bubbleSort\"\u003e\u003c/a\u003eПервый метод сортировки называется пузырьковой сортировкой ***Bubble sort***, в рамках которой выполняются следующие действия: \nпроход по файлу с обменом местами соседних элементов, нарушающих заданный порядок, до тех пор, пока файл не будет окончательно отсортирован. \n\nОсновное достоинство пузырьковой сортировки заключается в том, что его легко реализовать в виде программы.\n\nДля понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов. \n\nСуть алгоритма пузырьковой сортировки состоит в сравнении соседних элементов и их обмене, если они находятся не в надлежащем порядке.\nНеоднократно выполняя это действие, мы заставляем наибольший элемент \"всплывать\" к концу массива.\nСледующий проход приведет к всплыванию второго наибольшего элемента, и так до тех пор, пока после *n-1* итерации массив не будет полностью отсортирован.\n\n\u003e Сложность алгоритма: O(n\u003csup\u003e2\u003c/sup\u003e).\n\n![Bubble sort animation](./public/bubble-sort-animation.gif \"Bubble sort animation\")\n\n[wiki](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D1%83%D0%B7%D1%8B%D1%80%D1%8C%D0%BA%D0%BE%D0%BC \"Bubble sort animation\")\n\n## Selection Sort\n\n\u003ca name=\"selectionSort\"\u003e\u003c/a\u003eСортировка выбором ***Selection Sort*** начинается с поиска наименьшего элемента в списке и обмена его с первым элементом \n(таким образом, наименьший элемент помещается в окончательную позицию в отсортированном массиве).\n \nЗатем мы сканируем массив, начиная со второго элемента, в поисках наименьшего среди оставшихся *n-1* элементов и обмениваем найденный наименьший элемент со вторым, \nт.е. помещаем второй наименьший элемент в окончательную позицию в отсортированном массиве. \n\nВ общем случае, при i-ом проходе по списку *(0 \u0026#8804; i \u0026#8804; n-2)* алгоритм ищет наименьший элемент среди последних *n-i* элементов и обменивает его с *A[ i ]*. \nПосле выполнения *n-1* проходов список оказывается отсортирован.\n\n\u003e Сложность алгоритма: O(n\u003csup\u003e2\u003c/sup\u003e).\n\n![Selection Sort](./public/selection-sort-animation.gif \"Selection sort animation\")\n\n[wiki](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D0%BC\n \"Selection sort\")\n\n## Insertion Sort\n\n\u003ca name=\"insertionSort\"\u003e\u003c/a\u003eНа каждом шаге алгоритма сортировки встаками выбирается один из элементов входного массива и вставляется на нужную позицию в уже отсортированном массиве,\n до тех пор, пока входных элементы не будут исчерпана.\n  \nМетод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора. \n\nОбычно (и с целью получения устойчивого алгоритма сортировки), элементы вставляются по порядку их появления во входном массиве. \n\nВ приведённой ниже реализации на JavaScript алгоритма сортировки встаками используется именно эта стратегия выбора.\n\n\n\u003e Сложность алгоритма: O(n\u003csup\u003e2\u003c/sup\u003e).\n\n![Insertion Sort](./public/insertion-sort-animation2.gif \"Insertion sort animation\")\n[wiki](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0%D0%BC%D0%B8\n \"Selection sort\")\n\n## Merge Sort\n\n\u003ca name=\"mergeSort\"\u003e\u003c/a\u003eСортировка слиянием использует подход «разделяй и властвуй» для сортировки элементов в массиве. \n\nПо сути, это означает, что вместо работы с массивом в целом он непрерывно разбивает его на две части, \nпока обе половины не отсортированы, а затем половины объединяются в один решенный список.\n\n\u003e Сложность алгоритма: O(n log n).\n\n![Merge Sort](./public/merge-sort-animation2.gif \"Merge sort animation\")\n[wiki](https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC\n\"Merge sort\")\n\n## Quick Sort\n\n\u003ca name=\"quickSort\"\u003e\u003c/a\u003e\n\n\u003e Сложность алгоритма: O(n\u003csup\u003e2\u003c/sup\u003e).\n\n![Quick Sort](./public/quick-sort-animation.gif \"Quick sort animation\")\n[wiki](https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 \"Quick sort\")\n\n\n## Shell Sort\n\n\u003ca name=\"shellSort\"\u003e\u003c/a\u003eShell Sort «сортировкой по убыванию», улучшает Insertion Sort, \nразбивая исходный массив на несколько меньших подмассивов, каждый из которых сортируется с использованием Insertion Sort. \nСпособ выбора этих подмассивов - уникальность Shell Sort. Вместо того, чтобы разбивать массив на подмассивы смежных элементов, \nсортировка оболочки использует интервал *d*, иногда называемый *gap*, для создания подмассива, выбирая все элементы, \nкоторые являются d-ми элементами, отдельно.\n  \n  + Самый простой пример *d = n / 2*, *d\u003csub\u003e2\u003c/sub\u003e = d / 2 … d\u003csub\u003en\u003c/sub\u003e = 1*.  ***O(n\u003csup\u003e2\u003c/sup\u003e)***\n  + Предложение Хиббарда: проверить на всем n\u003csup\u003ei — 1\u003c/sup\u003e \u003c= n. ***O(n\u003csup\u003e3/2\u003c/sup\u003e)***\n  + Числа Седжвика ...\n\n\u003e Сложность алгоритма: O(n\u003csup\u003e2\u003c/sup\u003e) или O(n\u003csup\u003e3/2\u003c/sup\u003e).\n\n![Shell Sort](./public/shell-sort.gif \"Shell sort animation\")\n[![Shell Sort](https://img.youtube.com/vi/lvts84Qfo8o/0.jpg)](https://www.youtube.com/watch?v=lvts84Qfo8o)\n\n## Counting Sort\n\n\u003ca name=\"countingSort\"\u003e\u003c/a\u003eВначале для каждого элемента массива подсчитывается количество элементов, меньших, чем он, и на основе этой \nинформации текущий элемент помещается в соответствующее место отсортированного массива. \n\n\u003e Сложность алгоритма: O(n\u003csup\u003e2\u003c/sup\u003e).\n\n![Counting Sort](./public/counting-sort-animation.gif \"Counting sort animation\")\n\n## Comb Sort\n\n\u003ca name=\"combSort\"\u003e\u003c/a\u003eСортировка расчёской схожа с сортировкой пузырьком. \nОсновная идея этого алгоритма — устранить маленькие значения в конце массива, которые крайне замедляют сортировку пузырьком \n(большие значения в начале массива, не представляют проблемы для алгоритма сортировки пузырьком). \n\nВ сортировке пузырьком, когда сравниваются два элемента, промежуток (расстояние друг от друга) равен 1. \nОсновная идея сортировки расчёской в том, что этот промежуток может быть гораздо больше, чем единица.\n\n\u003e Сложность алгоритма: O(n\u003csup\u003e2\u003c/sup\u003e).\n\n![Comb Sort](./public/comb-sort-animation.gif \"Comb sort animation\")","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitaminvp%2Fsorting-algorithms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvitaminvp%2Fsorting-algorithms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitaminvp%2Fsorting-algorithms/lists"}