chore(JavaScript): quick sort added (#270)
parent
2259537cd9
commit
56a12bc250
|
@ -14,8 +14,9 @@
|
||||||
## Sorting
|
## Sorting
|
||||||
1. [Bubble Sort](src/sorting/bubble-sort.js)
|
1. [Bubble Sort](src/sorting/bubble-sort.js)
|
||||||
2. [Insertion Sort](src/sorting/insertion-sort.js)
|
2. [Insertion Sort](src/sorting/insertion-sort.js)
|
||||||
3. [Selection Sort](src/sorting/selection-sort.js)
|
3. [Merge Sort](src/sorting/merge-sort.js)
|
||||||
4. [Merge Sort](src/sorting/merge-sort.js)
|
4. [Quick Sort](src/sorting/quick-sort.js)
|
||||||
|
5. [Selection Sort](src/sorting/selection-sort.js)
|
||||||
|
|
||||||
## Strings
|
## Strings
|
||||||
1. [Palindrome](src/strings/palindrome.js)
|
1. [Palindrome](src/strings/palindrome.js)
|
||||||
|
|
|
@ -12,6 +12,8 @@ require('./searching/linear-search');
|
||||||
// Sorting
|
// Sorting
|
||||||
require('./sorting/bubble-sort');
|
require('./sorting/bubble-sort');
|
||||||
require('./sorting/insertion-sort');
|
require('./sorting/insertion-sort');
|
||||||
|
require('./sorting/merge-sort');
|
||||||
|
require('./sorting/quick-sort');
|
||||||
require('./sorting/selection-sort');
|
require('./sorting/selection-sort');
|
||||||
|
|
||||||
// Strings
|
// Strings
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
function swap(items, leftIndex, rightIndex) {
|
||||||
|
const temp = items[leftIndex];
|
||||||
|
items[leftIndex] = items[rightIndex];
|
||||||
|
items[rightIndex] = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
function partition(items, left, right) {
|
||||||
|
const pivot = items[Math.floor((right + left) / 2)]; // middle element
|
||||||
|
let i = left; // left pointer
|
||||||
|
let j = right; // right pointer
|
||||||
|
while (i <= j) {
|
||||||
|
while (items[i] < pivot) {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
while (items[j] > pivot) {
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
if (i <= j) {
|
||||||
|
swap(items, i, j); // sawpping two elements
|
||||||
|
i++;
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function quickSort(items, left, right) {
|
||||||
|
let index;
|
||||||
|
if (items.length > 1) {
|
||||||
|
index = partition(items, left, right); // index returned from partition
|
||||||
|
if (left < index - 1) {
|
||||||
|
// more elements on the left side of the pivot
|
||||||
|
quickSort(items, left, index - 1);
|
||||||
|
}
|
||||||
|
if (index < right) {
|
||||||
|
// more elements on the right side of the pivot
|
||||||
|
quickSort(items, index, right);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
// first call to quick sort
|
||||||
|
const items = [5, 3, 7, 6, 2, 9];
|
||||||
|
const sortedArray = quickSort(items, 0, items.length - 1);
|
||||||
|
console.log(sortedArray); // prints [2,3,5,6,7,9]
|
Loading…
Reference in New Issue