// your code goes here
function bubbleSort(arr) {
let n = arr.length;
for(let i=0;i<n-1;i++){
for(let j=0;j<n-i-1;j++){
if(arr[j] > arr[j+1]) {
// let tmp = arr[j];
// arr[j] = arr[j+1];
// arr[j+1] = tmp;
[arr[j], arr[j+1]] = [arr[j+1], arr[j]];
}
}
}
return arr;
}
function selectionSort(arr) {
let n = arr.length;
for(let i=0;i<n-1;i++){
let min_idx = i;
for(let j=i+1;j<n;j++){
if(arr[j] < arr[min_idx]) {
min_idx = j;
}
}
// min_idx is the index of the least element from i to n-1
// swap this element with ith element
let tmp = arr[i];
arr[i] = arr[min_idx];
arr[min_idx] = tmp;
// [arr[i], arr[min_idx]] = [arr[min_idx], arr[i]];
}
return arr;
}
console.log(selectionSort([13, 2, 5, 1, 4]))
// 1+2+3+4+ ... + n = n * (n+1)/2 = (n^2+n) / 2
// TC: O(n^2), SC: O(1)
// i=0, j = 0, 1, 2, .. n-2
// (0, 1), (1, 2), (2, 3) .... (n-2, n-1)
// i=1, j = 0, 1, 2, ... n-3
// (0, 1), (1, 2), (2, 3) .... (n-3, n-2)
Ly8geW91ciBjb2RlIGdvZXMgaGVyZQoKZnVuY3Rpb24gYnViYmxlU29ydChhcnIpIHsKCWxldCBuID0gYXJyLmxlbmd0aDsKCWZvcihsZXQgaT0wO2k8bi0xO2krKyl7CgkJZm9yKGxldCBqPTA7ajxuLWktMTtqKyspewoJCQlpZihhcnJbal0gPiBhcnJbaisxXSkgewoJCQkJLy8gbGV0IHRtcCA9IGFycltqXTsKCQkJCS8vIGFycltqXSA9IGFycltqKzFdOwoJCQkJLy8gYXJyW2orMV0gPSB0bXA7CgkJCQlbYXJyW2pdLCBhcnJbaisxXV0gPSBbYXJyW2orMV0sIGFycltqXV07CgkJCX0KCQl9Cgl9CglyZXR1cm4gYXJyOwp9CgpmdW5jdGlvbiBzZWxlY3Rpb25Tb3J0KGFycikgewoJbGV0IG4gPSBhcnIubGVuZ3RoOwoJZm9yKGxldCBpPTA7aTxuLTE7aSsrKXsKCQlsZXQgbWluX2lkeCA9IGk7CgkJZm9yKGxldCBqPWkrMTtqPG47aisrKXsKCQkJaWYoYXJyW2pdIDwgYXJyW21pbl9pZHhdKSB7CgkJCQltaW5faWR4ID0gajsKCQkJfQoJCX0KCQkvLyBtaW5faWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgbGVhc3QgZWxlbWVudCBmcm9tIGkgdG8gbi0xCgkJLy8gc3dhcCB0aGlzIGVsZW1lbnQgd2l0aCBpdGggZWxlbWVudAoJCWxldCB0bXAgPSBhcnJbaV07CgkJYXJyW2ldID0gYXJyW21pbl9pZHhdOwoJCWFyclttaW5faWR4XSA9IHRtcDsKCQkvLyBbYXJyW2ldLCBhcnJbbWluX2lkeF1dID0gW2FyclttaW5faWR4XSwgYXJyW2ldXTsKCX0KCXJldHVybiBhcnI7Cn0KCmNvbnNvbGUubG9nKHNlbGVjdGlvblNvcnQoWzEzLCAyLCA1LCAxLCA0XSkpCgoKLy8gMSsyKzMrNCsgLi4uICsgbiA9IG4gKiAobisxKS8yID0gKG5eMituKSAvIDIKCi8vIFRDOiBPKG5eMiksIFNDOiBPKDEpCi8vIGk9MCwgaiA9IDAsIDEsIDIsIC4uIG4tMgovLyAgICAgICAgICAoMCwgMSksICgxLCAyKSwgKDIsIDMpIC4uLi4gKG4tMiwgbi0xKQoKLy8gaT0xLCBqID0gMCwgMSwgMiwgLi4uIG4tMwovLyAgICAgICAgICAoMCwgMSksICgxLCAyKSwgKDIsIDMpIC4uLi4gKG4tMywgbi0yKQ==