Skip to content

Commit 75e03da

Browse files
authored
feat: add sorting algorithms in javascript (doocs#358)
* add bubble sort in javascript * add insertion sort in javascript * add selection sort in javascript * add merge sort in javascript * add quick sort in javascript * reformat code * modify bubblesort * reformat code
1 parent 06d81ca commit 75e03da

File tree

10 files changed

+245
-0
lines changed

10 files changed

+245
-0
lines changed
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function bubbleSort(inputArr) {
2+
let len = inputArr.length;
3+
let swapped = false;
4+
for (let i = 1; i <= len - 1; i++) {
5+
swapped = false;
6+
for (let j = 0; j < len - 1; j++) {
7+
if (inputArr[j] > inputArr[j + 1]) {
8+
let temp = inputArr[j];
9+
inputArr[j] = inputArr[j + 1];
10+
inputArr[j + 1] = temp;
11+
swapped = true
12+
}
13+
}
14+
if (swapped === false) break;
15+
}
16+
return (inputArr)
17+
}
18+
19+
let arr = [6, 3, 2, 1, 5];
20+
console.log(bubbleSort(arr))

basic/sorting/BubbleSort/README.md

+24
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,30 @@ public class BubbleSort {
4141
}
4242
}
4343
```
44+
### **JavaScript**
45+
46+
```javascript
47+
function bubbleSort(inputArr) {
48+
let len = inputArr.length;
49+
let swapped = false;
50+
for (let i = 1; i <= len - 1; i++) {
51+
swapped = false;
52+
for (let j = 0; j < len - 1; j++) {
53+
if (inputArr[j] > inputArr[j + 1]) {
54+
let temp = inputArr[j];
55+
inputArr[j] = inputArr[j + 1];
56+
inputArr[j + 1] = temp;
57+
swapped = true
58+
}
59+
}
60+
if (swapped === false) break;
61+
}
62+
return (inputArr)
63+
}
64+
65+
let arr = [6, 3, 2, 1, 5];
66+
console.log(bubbleSort(arr))
67+
```
4468

4569
<!-- tabs:end -->
4670

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function insertionSort(inputArr) {
2+
let len = inputArr.length;
3+
for (let i = 1; i <= len - 1; i++) {
4+
let temp = inputArr[i];
5+
let j = i - 1;
6+
while (j >= 0 && inputArr[j] > temp) {
7+
inputArr[j + 1] = inputArr[j];
8+
j--;
9+
}
10+
inputArr[j + 1] = temp;
11+
}
12+
return (inputArr);
13+
}
14+
15+
let arr = [6, 3, 2, 1, 5];
16+
console.log(insertionSort(arr))

basic/sorting/InsertionSort/README.md

+19
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,25 @@ public class InsertionSort {
4141
}
4242
}
4343
```
44+
### **JavaScript**
45+
```javascript
46+
function insertionSort(inputArr) {
47+
let len = inputArr.length;
48+
for (let i = 1; i <= len - 1; i++) {
49+
let temp = inputArr[i];
50+
let j = i - 1;
51+
while (j >= 0 && inputArr[j] > temp) {
52+
inputArr[j + 1] = inputArr[j];
53+
j--;
54+
}
55+
inputArr[j + 1] = temp;
56+
}
57+
return (inputArr);
58+
}
59+
60+
let arr = [6, 3, 2, 1, 5];
61+
console.log(insertionSort(arr))
62+
```
4463

4564
<!-- tabs:end -->
4665

basic/sorting/MergeSort/MergeSort.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
function mergeSort(arr) {
2+
if (arr.length < 2) return arr;
3+
let mid = Math.ceil(arr.length / 2);
4+
let arrLeft = mergeSort(arr.splice(0, mid));
5+
let arrRight = mergeSort(arr.splice(-mid));
6+
return merge(arrLeft, arrRight);
7+
}
8+
9+
function merge(arr1, arr2) {
10+
let arr = [];
11+
while (arr1.length && arr2.length) {
12+
if (arr1[0] < arr2[0]) {
13+
arr.push(arr1.shift());
14+
} else {
15+
arr.push(arr2.shift());
16+
}
17+
}
18+
return [...arr, ...arr1, ...arr2];
19+
20+
}
21+
22+
arr = [3, 5, 6, 2, 1, 7, 4];
23+
console.log(mergeSort(arr));

basic/sorting/MergeSort/README.md

+29
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,35 @@ public class MergeSort {
5656
}
5757
```
5858

59+
### **JavaScript**
60+
61+
```JavaScript
62+
function mergeSort(arr) {
63+
if (arr.length < 2) return arr;
64+
let mid = Math.ceil(arr.length / 2);
65+
let arrLeft = mergeSort(arr.splice(0, mid));
66+
let arrRight = mergeSort(arr.splice(-mid));
67+
return merge(arrLeft, arrRight);
68+
}
69+
70+
function merge(arr1, arr2) {
71+
let arr = [];
72+
while (arr1.length && arr2.length) {
73+
if (arr1[0] < arr2[0]) {
74+
arr.push(arr1.shift());
75+
} else {
76+
arr.push(arr2.shift());
77+
}
78+
}
79+
return [...arr, ...arr1, ...arr2];
80+
81+
}
82+
83+
arr = [3, 5, 6, 2, 1, 7, 4];
84+
console.log(mergeSort(arr));
85+
```
86+
87+
5988
<!-- tabs:end -->
6089

6190
## 算法分析

basic/sorting/QuickSort/QuickSort.js

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
function quickSort(arr) {
2+
let len = arr.length;
3+
return qSort(arr, 0, len - 1);
4+
}
5+
6+
function qSort(arr, left, right) {
7+
if (left < right) {
8+
let index = partition(arr, left, right);
9+
qSort(arr, left, index - 1);
10+
qSort(arr, index + 1, right);
11+
}
12+
return arr;
13+
}
14+
15+
function partition(arr, left, right) {
16+
let temp = arr[left];
17+
while (left < right) {
18+
while (left < right && arr[right] > temp) {
19+
right--;
20+
}
21+
arr[left] = arr[right];
22+
while (left < right && arr[left] <= temp) {
23+
left++;
24+
}
25+
arr[right] = arr[left];
26+
}
27+
arr[left] = temp;
28+
console.log(arr)
29+
return left;
30+
}
31+
32+
arr = [3, 5, 6, 2, 1, 7, 4];
33+
console.log(quickSort(arr))

basic/sorting/QuickSort/README.md

+38
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,44 @@ public class QuickSort {
5353
System.out.println(Arrays.toString(nums));
5454
}
5555
}
56+
```
57+
### **JavaScript**
58+
59+
```javascript
60+
function quickSort(arr) {
61+
let len = arr.length;
62+
return qSort(arr, 0, len - 1);
63+
}
64+
65+
function qSort(arr, left, right) {
66+
if (left < right) {
67+
let index = partition(arr, left, right);
68+
qSort(arr, left, index - 1);
69+
qSort(arr, index + 1, right);
70+
}
71+
return arr;
72+
}
73+
74+
function partition(arr, left, right) {
75+
let temp = arr[left];
76+
while (left < right) {
77+
while (left < right && arr[right] > temp) {
78+
right--;
79+
}
80+
arr[left] = arr[right];
81+
while (left < right && arr[left] <= temp) {
82+
left++;
83+
}
84+
arr[right] = arr[left];
85+
}
86+
arr[left] = temp;
87+
console.log(arr)
88+
return left;
89+
}
90+
91+
arr = [3, 5, 6, 2, 1, 7, 4];
92+
console.log(quickSort(arr))
93+
5694
```
5795

5896
<!-- tabs:end -->

basic/sorting/SelectionSort/README.md

+24
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,30 @@ public class SelectionSort {
4040

4141
```
4242

43+
### **JavaScript**
44+
45+
```javascript
46+
function selectionSort(inputArr) {
47+
let len = inputArr.length;
48+
for (let i = 0; i <= len - 2; i++) {
49+
let j = i;
50+
let min = j;
51+
while (j <= len - 1) {
52+
if (inputArr[j] < inputArr[min])
53+
min = j;
54+
j++;
55+
}
56+
let temp = inputArr[i];
57+
inputArr[i] = inputArr[min];
58+
inputArr[min] = temp;
59+
}
60+
return inputArr;
61+
}
62+
63+
let arr = [6, 3, 2, 1, 5];
64+
console.log(selectionSort(arr))
65+
```
66+
4367
<!-- tabs:end -->
4468

4569
## 算法分析
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function selectionSort(inputArr) {
2+
let len = inputArr.length;
3+
for (let i = 0; i <= len - 2; i++) {
4+
let j = i;
5+
let min = j;
6+
while (j <= len - 1) {
7+
if (inputArr[j] < inputArr[min])
8+
min = j;
9+
j++;
10+
}
11+
let temp = inputArr[i];
12+
inputArr[i] = inputArr[min];
13+
inputArr[min] = temp;
14+
}
15+
return inputArr;
16+
}
17+
18+
let arr = [6, 3, 2, 1, 5];
19+
console.log(selectionSort(arr))

0 commit comments

Comments
 (0)