1function* bubbleSort(arr) {
2 const n = arr.length;
3
4 for (let i = 0; i < n - 1; i++) {
5 for (let j = 0; j < n - i - 1; j++) {
6 // Compare adjacent elements
7 yield { type: 'compare', indices: [j, j + 1] };
8
9 if (arr[j] > arr[j + 1]) {
10 // Swap elements
11 [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
12 yield { type: 'swap', indices: [j, j + 1] };
13 }
14 }
15 // Mark element as sorted
16 yield { type: 'sorted', index: n - i - 1 };
17 }
18
19 yield { type: 'sorted', index: 0 };
20}