-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1122_relativeSortArray.js
47 lines (47 loc) · 1.1 KB
/
1122_relativeSortArray.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
* @param {number[]} arr1
* @param {number[]} arr2
* @return {number[]}
*/
var relativeSortArray = function (arr1, arr2) {
if (arr1.length === 0) {
return arr1;
}
function arrSort(idx) {
let newArr = arr1.slice(idx);
for (let i = 0; i < newArr.length; i++) {
for (let j = i + 1; j < newArr.length; j++) {
if (newArr[i] > newArr[j]) {
[newArr[i], newArr[j]] = [newArr[j], newArr[i]];
}
}
}
return newArr;
}
if (arr2.length === 0) {
return arrSort(0);
}
let index = 0;
for (let i = 0; i < arr2.length; i++) {
while (index < arr1.length) {
if (arr1[index] === arr2[i]) {
index++;
} else {
let pointer = index + 1;
while (pointer < arr1.length) {
if (arr1[pointer] === arr2[i]) {
[arr1[index], arr1[pointer]] = [arr1[pointer], arr1[index]];
index++;
break;
}
pointer++;
}
if (pointer === arr1.length) {
break;
}
}
}
}
arr1 = arr1.slice(0, index).concat(arrSort(index));
return arr1;
};