mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-04 15:39:42 +08:00

* 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>
32 lines
991 B
JavaScript
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
|
|
}
|