Cho mảng số. In các phần tử theo thứ tự: 2 phần tử tăng, 3 phần tử giảm, 4 phần tử tăng, 5 phần tử giảm... Ví dụ: [1,4,0,2,7,9,3] → sắp xếp [0,1,2,3,4,7,9] → in: 0 1 | 9 7 4 | 2 3.
Hai con trỏ + cờ
Sắp xếp mảng. Dùng left=0, right=n-1, flag=2 (số phần tử in lần hiện tại). Nếu flag chẵn → in từ left tăng dần. Lẻ → in từ right giảm dần. Tăng flag sau mỗi lượt.
Ví dụ minh họa
#include <bits/stdc++.h>
using namespace std;
void printAlternate(int arr[], int n) {
sort(arr, arr+n);
int left = 0, right = n-1, flag = 2;
while (left <= right) {
if (flag % 2 == 0) {
for (int i = left; i < left+flag && i <= right; i++)
cout << arr[i] << ' ';
left += flag;
} else {
for (int i = right; i > right-flag && i >= left; i--)
cout << arr[i] << ' ';
right -= flag;
}
flag++;
}
}
int main() {
int arr[] = {23, 45, 78, 32, 89, 10};
int n = sizeof(arr)/sizeof(arr[0]);
printAlternate(arr, n); // 10 23 89 78 45 32
return 0;
}
Kết quả
10 23 89 78 45 32