冒泡排序c++可视化程序并给出注释
时间: 2023-07-10 22:07:36 浏览: 92
以下是冒泡排序的C++可视化程序:
```cpp
#include <iostream>
#include <SFML/Graphics.hpp> // 引入 SFML 图形库
using namespace std;
void bubbleSort(int arr[], int n, sf::RenderWindow& window) {
sf::RectangleShape rectangles[n]; // 定义矩形数组
for (int i = 0; i < n; i++) {
rectangles[i].setSize(sf::Vector2f(30, arr[i])); // 设置矩形的大小和高度
rectangles[i].setFillColor(sf::Color::Green); // 设置矩形的颜色
rectangles[i].setPosition(sf::Vector2f(40 * i + 50, 400 - arr[i])); // 设置矩形的位置
}
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
// 交换两个矩形的位置
sf::Vector2f pos1 = rectangles[j].getPosition();
sf::Vector2f pos2 = rectangles[j + 1].getPosition();
rectangles[j].setPosition(pos2);
rectangles[j + 1].setPosition(pos1);
// 清空窗口
window.clear(sf::Color::White);
// 重新绘制所有矩形
for (int k = 0; k < n; k++) {
window.draw(rectangles[k]);
}
// 显示窗口
window.display();
}
}
}
}
int main() {
int arr[] = { 64, 34, 25, 12, 22, 11, 90 };
int n = sizeof(arr) / sizeof(arr[0]);
sf::RenderWindow window(sf::VideoMode(500, 500), "Bubble Sort"); // 创建窗口
bubbleSort(arr, n, window);
return 0;
}
```
注释如下:
- `#include <SFML/Graphics.hpp>`:引入 SFML 图形库。
- `void bubbleSort(int arr[], int n, sf::RenderWindow& window)`:冒泡排序函数。
- `sf::RectangleShape rectangles[n]`:定义矩形数组,用于可视化排序过程。
- `for (int i = 0; i < n; i++)`:循环遍历数组,为每个元素创建一个矩形,并设置其大小、颜色和位置。
- `for (int i = 0; i < n - 1; i++)`:外层循环遍历整个数组。
- `for (int j = 0; j < n - i - 1; j++)`:内层循环遍历未排序部分的数组。
- `if (arr[j] > arr[j + 1])`:如果相邻两个元素顺序不正确,则交换它们的位置。
- `sf::Vector2f pos1 = rectangles[j].getPosition();`:获取第一个矩形的位置。
- `sf::Vector2f pos2 = rectangles[j + 1].getPosition();`:获取第二个矩形的位置。
- `rectangles[j].setPosition(pos2);`:将第一个矩形移动到第二个矩形的位置。
- `rectangles[j + 1].setPosition(pos1);`:将第二个矩形移动到第一个矩形的位置。
- `window.clear(sf::Color::White);`:清空窗口。
- `for (int k = 0; k < n; k++)`:重新绘制所有矩形。
- `window.display();`:显示窗口。
- `int main()`:主函数。
- `int arr[] = { 64, 34, 25, 12, 22, 11, 90 };`:定义一个整数数组。
- `sf::RenderWindow window(sf::VideoMode(500, 500), "Bubble Sort");`:创建一个窗口。
- `bubbleSort(arr, n, window);`:调用冒泡排序函数。
阅读全文