mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-04 15:39:42 +08:00
feat: add dutchNationalFlagSort implementation (#1305)
* feat: add dutchNationalFlagSort implementation * fix: add test, fit code style * fix: add link to directory.md
This commit is contained in:
@ -303,6 +303,7 @@
|
||||
* [CombSort](Sorts/CombSort.js)
|
||||
* [CountingSort](Sorts/CountingSort.js)
|
||||
* [CycleSort](Sorts/CycleSort.js)
|
||||
* [DutchNationalFlagSort](Sorts/DutchNationalFlagSort.js)
|
||||
* [FindSecondLargestElement](Sorts/FindSecondLargestElement.js)
|
||||
* [FisherYatesShuffle](Sorts/FisherYatesShuffle.js)
|
||||
* [FlashSort](Sorts/FlashSort.js)
|
||||
|
33
Sorts/DutchNationalFlagSort.js
Normal file
33
Sorts/DutchNationalFlagSort.js
Normal file
@ -0,0 +1,33 @@
|
||||
/**
|
||||
* @function dutchNationalFlagSort
|
||||
* @description Dutch National Flag Sort is an algorithm to sort an array containing 0s, 1s, and 2s in linear time.
|
||||
Time complexity of Dutch National Flag Sort Algorithm is O(n).
|
||||
Auxiliary Space required for Dutch National Flag Sort Algorithm is O(1).
|
||||
* @param {Integer[]} nums - Array of integers containing 0s, 1s, and 2s.
|
||||
* @return {Integer[]} - Array of integers sorted in non-decreasing order.
|
||||
* @see [Dutch National Flag Sort](https://en.wikipedia.org/wiki/Dutch_national_flag_problem)
|
||||
*/
|
||||
export function dutchNationalFlagSort (nums) {
|
||||
let low = 0
|
||||
let mid = 0
|
||||
let high = nums.length - 1
|
||||
|
||||
while (mid <= high) {
|
||||
switch (nums[mid]) {
|
||||
case 0:
|
||||
[nums[low], nums[mid]] = [nums[mid], nums[low]]
|
||||
low++
|
||||
mid++
|
||||
break
|
||||
case 1:
|
||||
mid++
|
||||
break
|
||||
case 2:
|
||||
[nums[mid], nums[high]] = [nums[high], nums[mid]]
|
||||
high--
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return nums
|
||||
}
|
9
Sorts/test/DutchNationalFlagSort.test.js
Normal file
9
Sorts/test/DutchNationalFlagSort.test.js
Normal file
@ -0,0 +1,9 @@
|
||||
import { dutchNationalFlagSort } from '../DutchNationalFlagSort'
|
||||
|
||||
describe('DutchNationalFlagSort', () => {
|
||||
it('should sort arrays correctly', () => {
|
||||
expect(dutchNationalFlagSort([2, 0, 2, 1, 1, 0])).toEqual([0, 0, 1, 1, 2, 2])
|
||||
expect(dutchNationalFlagSort([2, 1, 0])).toEqual([0, 1, 2])
|
||||
expect(dutchNationalFlagSort([1, 0, 0, 0, 1])).toEqual([0, 0, 0, 1, 1])
|
||||
})
|
||||
})
|
Reference in New Issue
Block a user