Giả sử chúng ta có một mảng số nguyên đã được sắp xếp theo thứ tự tăng dần. Chúng ta cần viết một hàm JavaScript mà không sử dụng phương thức Array.prototype.sort() nội bộ sắp xếp mảng như sau:
- Số đầu tiên nên là lớn nhất
- Số thứ hai nên là nhỏ nhất
- Số thứ ba nên là lớn nhất thứ 2
- Số thứ tư nên là nhỏ nhất thứ 2
- Và cứ thế.
Ví dụ:
Nếu mảng đầu vào là:
const arr = [1, 2, 3, 4, 5, 6];
Thì đầu ra nên là:
const output = [ 6, 1, 5, 2, 4, 3 ];
Ví dụ
Dưới đây là mã nguồn:
const arr = [1, 2, 3, 4, 5, 6]; const alternativeSort = (arr = []) => { const res = []; let left = 0; let right = arr.length - 1; while (res.length < arr.length) { res.push(arr[right]); if (left !== right) { res.push(arr[left]); } left++; right--; }; return res; }; console.log(alternativeSort(arr));Kết quả
Đầu ra trên console:
[ 6, 1, 5, 2, 4, 3 ]
Giải thích: Two-pointer từ 2 đầu mảng đã sort. Lấy right (max), rồi left (min), lặp lại. O(n) time, O(n) space (mảng kết quả). In-place khó hơn do cần shift elements.