I learn a simple selection sort algoritm and try using from javascript/typescript.
and this my selection.sort algorithm in SelectionSort class
export default class SelectionSort {
private dataForSmallestToBiggest: number[];
private dataForBiggestToSmallest: number[];
public startData: number[];
private biggestIndex: number = 0;
private biggest: number = 0;
private smallestIndex: number = 0;
private smallest: number = 0;
public iterationSmallestToBiggest: number = 0;
public iterationBiggestToSmallest: number = 0;
constructor(data: number[]) {
// initiate for array smallest to biggest
this.dataForSmallestToBiggest = data;
// initiate for array biggest to smallest
this.dataForBiggestToSmallest = data;
// initiate for start data
this.startData = data;
}
// set biggest data
private setBiggest() {
// initiate biggest data
this.biggest = this.dataForBiggestToSmallest[0];
//initiate biggest index data
this.biggestIndex = 0;
// looping for searching biggest index and biggest value from array
this.dataForBiggestToSmallest.forEach((val, index) => {
// if biggest found
if (val > this.biggest) {
// change biggest value
this.biggest = val;
// change biggest index
this.biggestIndex = index;
}
// increase how many iteration for this looping
this.iterationBiggestToSmallest++;
});
}
// searching smallest data
private setSmallest() {
// initiate smallest data
this.smallest = this.dataForSmallestToBiggest[0];
//initiate smallest index data
this.smallestIndex = 0;
// looping for searching smallest index and smallest value from array
this.dataForSmallestToBiggest.forEach((val, index) => {
// if smallest found
if (val < this.smallest) {
// change the smallest value
this.smallest = val;
// change the smallest index
this.smallestIndex = index;
}
// increase how many iteration for this looping
this.iterationSmallestToBiggest++;
});
}
// sorting from smallest to biggest
public smallestToBiggest() {
// initiate result variable
let result: number[] = [];
while (this.dataForSmallestToBiggest.length > 0) {
// change smallest value and smallest index
this.setSmallest();
// add result from smallest data;
result.push(this.smallest);
// remove array by smallest inex
this.dataForSmallestToBiggest.splice(this.smallestIndex, 1);
// increase how many sorting smallest to biggest sort
this.iterationSmallestToBiggest++;
}
return result;
}
// sorting from biggest to smallest
public biggestToSmallest() {
// initiate result variable
let result: number[] = [];
while (this.dataForBiggestToSmallest.length > 0) {
// change biggest value and biggest index
this.setBiggest();
// add result
result.push(this.biggest);
// remove array by biggest inex
this.dataForBiggestToSmallest.splice(this.biggestIndex, 1);
// increase how many sorting smallest to biggest sort
this.iterationBiggestToSmallest++;
}
return result;
}
}
if i call biggestTosmallest only or smallestToBiggest only this algorithm work
i using biggest to smallest only
import SelectionSort from "./SelectionSort.js";
let selection = new SelectionSort([1, 5, 6, 3, 2, 7, 10, 3, 56, 18, 784, 83]);
let biggestToSmallest = selection.biggestToSmallest();
console.log(
`biggest to smallest data : ${selection.startData} iteration : ${selection.iterationBiggestToSmallest} , result :`
);
console.log(biggestToSmallest);
i using smallest to biggest only
import SelectionSort from "./SelectionSort.js";
let selection = new SelectionSort([1, 5, 6, 3, 2, 7, 10, 3, 56, 18, 784, 83]);
let smallestToBiggest = selection.smallestToBiggest();
console.log(
`smallest to biggest data : ${selection.startData} iteration : ${selection.iterationSmallestToBiggest} , result :`
);
console.log(smallestToBiggest);
But If i using biggest to smallest and smallest to biggest
import SelectionSort from "./SelectionSort.js";
let selection = new SelectionSort([1, 5, 6, 3, 2, 7, 10, 3, 56, 18, 784, 83]);
let biggestToSmallest = selection.biggestToSmallest();
console.log(
`biggest to smallest data : ${selection.startData} iteration : ${selection.iterationBiggestToSmallest} , result :`
);
console.log(biggestToSmallest);
let smallestToBiggest = selection.smallestToBiggest();
console.log(
`smallest to biggest data : ${selection.startData} iteration : ${selection.iterationSmallestToBiggest} , result :`
);
console.log(smallestToBiggest);
biggest to smallest only work, and smallest to biggest not work. startData property is erased too.
what wrong in my code? and why only biggest to smallest work?
this.dataForSmallestToBiggest = [...data];andthis.dataForBiggestToSmallest = [...data];