โจทย์
ให้อาร์เรย์ตัวเลข ต้องการพิมพ์ค่าออกมาเป็นลำดับสลับกันระหว่างเพิ่มและลด โดย:
- 2 ตัวแรก เรียงเพิ่ม
- 3 ตัวถัดไป เรียงลด
- 4 ตัวถัดไป เรียงเพิ่ม
- เพิ่มขึ้นทีละ 1 ทุกช่วง
ตัวอย่าง: Input: {1, 4, 0, 2, 7, 9, 3} → Output: 0 1 9 7 4 2 3
คำอธิบาย: เรียงเพิ่มได้ 0 1 2 3 4 7 9 → 2 ตัวแรก (0,1) → 3 ตัวท้าย (9,7,4) → 4 ตัวถัดไป (2,3)
อัลกอริทึม
Step 1: เรียงอาร์เรย์เพิ่ม
Step 2: left=0, right=n-1, flag=2
Step 3: while left <= right
Step 4: ถ้า flag คู่ (เพิ่ม)
พิมพ์จาก left ถึง left+flag
อัปเดต left = i, flag++
Step 5: ถ้า flag คี่ (ลด)
พิมพ์จาก right ถึง right-flag
อัปเดต right = i, flag++
Step 6: จบ
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
void printAlternateSeq(int arr[], int n) {
sort(arr, arr + n);
int left = 0, right = n - 1, flag = 2, i;
while (left <= right) {
if (flag % 2 == 0) {
for (i = left; i < left + flag && i <= right; i++)
cout << arr[i] << " ";
left = i;
} else {
for (i = right; i > right - flag && i >= left; i--)
cout << arr[i] << " ";
right = i;
}
flag++;
}
}
int main() {
int n = 6;
int arr[] = {23, 45, 78, 32, 89, 10};
printAlternateSeq(arr, n);
return 0;
}
ผลลัพธ์
10 23 89 78 45 32