diff --git a/basic/sorting/BubbleSort/BubbleSort.js b/basic/sorting/BubbleSort/BubbleSort.js new file mode 100644 index 0000000000000..4b9a469be0194 --- /dev/null +++ b/basic/sorting/BubbleSort/BubbleSort.js @@ -0,0 +1,20 @@ +function bubbleSort(inputArr) { + let len = inputArr.length; + let swapped = false; + for (let i = 1; i <= len - 1; i++) { + swapped = false; + for (let j = 0; j < len - 1; j++) { + if (inputArr[j] > inputArr[j + 1]) { + let temp = inputArr[j]; + inputArr[j] = inputArr[j + 1]; + inputArr[j + 1] = temp; + swapped = true + } + } + if (swapped === false) break; + } + return (inputArr) +} + +let arr = [6, 3, 2, 1, 5]; +console.log(bubbleSort(arr)) diff --git a/basic/sorting/BubbleSort/README.md b/basic/sorting/BubbleSort/README.md index a282a12c2449f..41e2d6d3d50fb 100644 --- a/basic/sorting/BubbleSort/README.md +++ b/basic/sorting/BubbleSort/README.md @@ -41,6 +41,30 @@ public class BubbleSort { } } ``` +### **JavaScript** + +```javascript +function bubbleSort(inputArr) { + let len = inputArr.length; + let swapped = false; + for (let i = 1; i <= len - 1; i++) { + swapped = false; + for (let j = 0; j < len - 1; j++) { + if (inputArr[j] > inputArr[j + 1]) { + let temp = inputArr[j]; + inputArr[j] = inputArr[j + 1]; + inputArr[j + 1] = temp; + swapped = true + } + } + if (swapped === false) break; + } + return (inputArr) +} + +let arr = [6, 3, 2, 1, 5]; +console.log(bubbleSort(arr)) +``` diff --git a/basic/sorting/InsertionSort/InsertionSort.js b/basic/sorting/InsertionSort/InsertionSort.js new file mode 100644 index 0000000000000..4608bde99d0a8 --- /dev/null +++ b/basic/sorting/InsertionSort/InsertionSort.js @@ -0,0 +1,16 @@ +function insertionSort(inputArr) { + let len = inputArr.length; + for (let i = 1; i <= len - 1; i++) { + let temp = inputArr[i]; + let j = i - 1; + while (j >= 0 && inputArr[j] > temp) { + inputArr[j + 1] = inputArr[j]; + j--; + } + inputArr[j + 1] = temp; + } + return (inputArr); +} + +let arr = [6, 3, 2, 1, 5]; +console.log(insertionSort(arr)) \ No newline at end of file diff --git a/basic/sorting/InsertionSort/README.md b/basic/sorting/InsertionSort/README.md index 5c863b91036cf..e566d5818699c 100644 --- a/basic/sorting/InsertionSort/README.md +++ b/basic/sorting/InsertionSort/README.md @@ -41,6 +41,25 @@ public class InsertionSort { } } ``` +### **JavaScript** +```javascript +function insertionSort(inputArr) { + let len = inputArr.length; + for (let i = 1; i <= len - 1; i++) { + let temp = inputArr[i]; + let j = i - 1; + while (j >= 0 && inputArr[j] > temp) { + inputArr[j + 1] = inputArr[j]; + j--; + } + inputArr[j + 1] = temp; + } + return (inputArr); +} + +let arr = [6, 3, 2, 1, 5]; +console.log(insertionSort(arr)) +``` diff --git a/basic/sorting/MergeSort/MergeSort.js b/basic/sorting/MergeSort/MergeSort.js new file mode 100644 index 0000000000000..d7129a0fb29e0 --- /dev/null +++ b/basic/sorting/MergeSort/MergeSort.js @@ -0,0 +1,23 @@ +function mergeSort(arr) { + if (arr.length < 2) return arr; + let mid = Math.ceil(arr.length / 2); + let arrLeft = mergeSort(arr.splice(0, mid)); + let arrRight = mergeSort(arr.splice(-mid)); + return merge(arrLeft, arrRight); +} + +function merge(arr1, arr2) { + let arr = []; + while (arr1.length && arr2.length) { + if (arr1[0] < arr2[0]) { + arr.push(arr1.shift()); + } else { + arr.push(arr2.shift()); + } + } + return [...arr, ...arr1, ...arr2]; + +} + +arr = [3, 5, 6, 2, 1, 7, 4]; +console.log(mergeSort(arr)); \ No newline at end of file diff --git a/basic/sorting/MergeSort/README.md b/basic/sorting/MergeSort/README.md index 55e8cf6779df6..d9e2d8ef80db1 100644 --- a/basic/sorting/MergeSort/README.md +++ b/basic/sorting/MergeSort/README.md @@ -56,6 +56,35 @@ public class MergeSort { } ``` +### **JavaScript** + +```JavaScript +function mergeSort(arr) { + if (arr.length < 2) return arr; + let mid = Math.ceil(arr.length / 2); + let arrLeft = mergeSort(arr.splice(0, mid)); + let arrRight = mergeSort(arr.splice(-mid)); + return merge(arrLeft, arrRight); +} + +function merge(arr1, arr2) { + let arr = []; + while (arr1.length && arr2.length) { + if (arr1[0] < arr2[0]) { + arr.push(arr1.shift()); + } else { + arr.push(arr2.shift()); + } + } + return [...arr, ...arr1, ...arr2]; + +} + +arr = [3, 5, 6, 2, 1, 7, 4]; +console.log(mergeSort(arr)); +``` + + ## 算法分析 diff --git a/basic/sorting/QuickSort/QuickSort.js b/basic/sorting/QuickSort/QuickSort.js new file mode 100644 index 0000000000000..e7a7bcae0ef31 --- /dev/null +++ b/basic/sorting/QuickSort/QuickSort.js @@ -0,0 +1,33 @@ +function quickSort(arr) { + let len = arr.length; + return qSort(arr, 0, len - 1); +} + +function qSort(arr, left, right) { + if (left < right) { + let index = partition(arr, left, right); + qSort(arr, left, index - 1); + qSort(arr, index + 1, right); + } + return arr; +} + +function partition(arr, left, right) { + let temp = arr[left]; + while (left < right) { + while (left < right && arr[right] > temp) { + right--; + } + arr[left] = arr[right]; + while (left < right && arr[left] <= temp) { + left++; + } + arr[right] = arr[left]; + } + arr[left] = temp; + console.log(arr) + return left; +} + +arr = [3, 5, 6, 2, 1, 7, 4]; +console.log(quickSort(arr)) diff --git a/basic/sorting/QuickSort/README.md b/basic/sorting/QuickSort/README.md index 655a928a3c6a6..7c2ba154291fd 100644 --- a/basic/sorting/QuickSort/README.md +++ b/basic/sorting/QuickSort/README.md @@ -53,6 +53,44 @@ public class QuickSort { System.out.println(Arrays.toString(nums)); } } +``` +### **JavaScript** + +```javascript +function quickSort(arr) { + let len = arr.length; + return qSort(arr, 0, len - 1); +} + +function qSort(arr, left, right) { + if (left < right) { + let index = partition(arr, left, right); + qSort(arr, left, index - 1); + qSort(arr, index + 1, right); + } + return arr; +} + +function partition(arr, left, right) { + let temp = arr[left]; + while (left < right) { + while (left < right && arr[right] > temp) { + right--; + } + arr[left] = arr[right]; + while (left < right && arr[left] <= temp) { + left++; + } + arr[right] = arr[left]; + } + arr[left] = temp; + console.log(arr) + return left; +} + +arr = [3, 5, 6, 2, 1, 7, 4]; +console.log(quickSort(arr)) + ``` diff --git a/basic/sorting/SelectionSort/README.md b/basic/sorting/SelectionSort/README.md index 3ea901d9b0ad6..cff9ae49547a8 100644 --- a/basic/sorting/SelectionSort/README.md +++ b/basic/sorting/SelectionSort/README.md @@ -40,6 +40,30 @@ public class SelectionSort { ``` +### **JavaScript** + +```javascript +function selectionSort(inputArr) { + let len = inputArr.length; + for (let i = 0; i <= len - 2; i++) { + let j = i; + let min = j; + while (j <= len - 1) { + if (inputArr[j] < inputArr[min]) + min = j; + j++; + } + let temp = inputArr[i]; + inputArr[i] = inputArr[min]; + inputArr[min] = temp; + } + return inputArr; +} + +let arr = [6, 3, 2, 1, 5]; +console.log(selectionSort(arr)) +``` + ## 算法分析 diff --git a/basic/sorting/SelectionSort/SelectionSort.js b/basic/sorting/SelectionSort/SelectionSort.js new file mode 100644 index 0000000000000..9e2f37dbb7c51 --- /dev/null +++ b/basic/sorting/SelectionSort/SelectionSort.js @@ -0,0 +1,19 @@ +function selectionSort(inputArr) { + let len = inputArr.length; + for (let i = 0; i <= len - 2; i++) { + let j = i; + let min = j; + while (j <= len - 1) { + if (inputArr[j] < inputArr[min]) + min = j; + j++; + } + let temp = inputArr[i]; + inputArr[i] = inputArr[min]; + inputArr[min] = temp; + } + return inputArr; +} + +let arr = [6, 3, 2, 1, 5]; +console.log(selectionSort(arr)) \ No newline at end of file