Mô phỏng hành vi Alt+Tab: danh sách ứng dụng mở, vị trí 0 = ứng dụng đang hoạt động, vị trí 1 = gần đây nhất, ... Chuyển ứng dụng tại vị trí k lên đầu (vị trí 0), các ứng dụng khác dịch chuyển.
Ví dụ: arr={1,2,3,4,5}, k=2 (0-based) → arr[2]=3 lên đầu → {3,1,2,4,5}.
Thuật toán
- Lưu
id = arr[k]. - Dịch các phần tử từ 0 đến k-1 sang phải một vị trí.
- Gán
arr[0] = id.
Ví dụ minh họa (C++)
#include <bits/stdc++.h>
using namespace std;
void recently(int* arr, int size, int elem) {
int idx = elem % size; // xử lý elem >= size
int id = arr[idx];
// Dịch phải các phần tử trước idx
for (int i = idx; i > 0; --i)
arr[i] = arr[i-1];
arr[0] = id;
}
void print(int* arr, int size) {
for (int i = 0; i < size; ++i) cout << arr[i] << " ";
cout << endl;
}
int main() {
int arr[] = {6, 1, 9, 5, 3};
int size = sizeof(arr)/sizeof(arr[0]);
int elem = 3; // chỉ số muốn chuyển lên đầu
recently(arr, size, elem);
cout << "MRU order: ";
print(arr, size);
return 0;
}
Kết quả
MRU order: 5 6 1 9 3