Files
JavaScript/Sorts/SwapSort.js
Roland Hummel 86d333ee94 feat: Test running overhaul, switch to Prettier & reformat everything (#1407)
* chore: Switch to Node 20 + Vitest

* chore: migrate to vitest mock functions

* chore: code style (switch to prettier)

* test: re-enable long-running test

Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime!

see #1193

* chore: code style

* chore: fix failing tests

* Updated Documentation in README.md

* Update contribution guidelines to state usage of Prettier

* fix: set prettier printWidth back to 80

* chore: apply updated code style automatically

* fix: set prettier line endings to lf again

* chore: apply updated code style automatically

---------

Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
2023-10-04 02:38:19 +05:30

32 lines
991 B
JavaScript

/**
* @function SwapSort
* @description Swap Sort is an algorithm to find the number of swaps required to sort an array.
Time complexity of Swap Sort Algorithm is O(nlogn).
Auxiliary Space required for Swap Sort Algorithm is O(n).
* @param {Integer[]} items - Array of integers
* @return {Integer} - Number of swaps required to sort the array.
* @see [SwapSort](https://www.geeksforgeeks.org/minimum-number-swaps-required-sort-array/)
*/
export function minSwapsToSort(items) {
const sortedArray = items.slice()
sortedArray.sort()
const indexMap = {}
for (let i = 0; i < items.length; i++) {
indexMap[items[i]] = i
}
let swaps = 0
for (let i = 0; i < items.length; i++) {
if (items[i] !== sortedArray[i]) {
const temp = items[i]
items[i] = items[indexMap[sortedArray[i]]]
items[indexMap[sortedArray[i]]] = temp
indexMap[temp] = indexMap[sortedArray[i]]
indexMap[sortedArray[i]] = i
swaps++
}
}
return swaps
}