merge: Bubble Sort enhancements for nearly sorted or sorted array, added test cases and documentation (#895)

* BubbleSort enacements for nearly sorted or sorted array and added test cases

* BubbleSort enacements for nearly sorted or sorted array and added test cases

* Bubble sort requested changes solved

* standard js style issue fixed
This commit is contained in:
Md. Amin Hossain
2022-02-19 18:23:54 +06:00
committed by GitHub
parent 041918d7b7
commit dbc98d096b
2 changed files with 13 additions and 4 deletions

View File

@ -2,6 +2,7 @@
* compares adjacent element and swaps their position
* The big O on bubble sort in worst and best case is O(N^2).
* Not efficient.
* Somehow if the array is sorted or nearly sorted then we can optimize bubble sort by adding a flag.
*
* In bubble sort, we keep iterating while something was swapped in
* the previous inner-loop iteration. By swapped I mean, in the
@ -17,16 +18,23 @@
*/
export function bubbleSort (items) {
const length = items.length
let noSwaps
for (let i = (length - 1); i > 0; i--) {
for (let i = length; i > 0; i--) {
// flag for optimization
noSwaps = true
// Number of passes
for (let j = (length - i); j > 0; j--) {
for (let j = 0; j < (i - 1); j++) {
// Compare the adjacent positions
if (items[j] < items[j - 1]) {
if (items[j] > items[j + 1]) {
// Swap the numbers
[items[j], items[j - 1]] = [items[j - 1], items[j]]
[items[j], items[j + 1]] = [items[j + 1], items[j]]
noSwaps = false
}
}
if (noSwaps) {
break
}
}
return items

View File

@ -6,6 +6,7 @@ describe('bubbleSort', () => {
expect(bubbleSort([])).toEqual([])
expect(bubbleSort([1, 2, 3])).toEqual([1, 2, 3])
expect(bubbleSort([5, 6, 7, 8, 1, 2, 12, 14])).toEqual([1, 2, 5, 6, 7, 8, 12, 14])
expect(bubbleSort([5, 6, 7, 8, 9, 4])).toEqual([4, 5, 6, 7, 8, 9])
})
})