代码如下
#include
#include
#include
#include
using namespace std;
void BubbleSortUp(int n, int a[])
{
//画图
initgraph(740, 580, SHOWCONSOLE);//创建一个尺寸为 740宽x580高 的绘图窗口,同时显示控制台窗口:
for (int i = 1; i <= n; i++)//排序趟数
{
int p = 0;//排序次数
boolean flag = false;//标识变量,标识是否进行交换
for (int j = 1; j <= n - i; j++)//排序内循环
{
//画图形过程,在画布画出n个矩形和输入的n个数字
for (int x = 1; x <= n; x++)
{
setcolor(BLACK);//把矩形边框设置为黑色
setfillcolor(YELLOW);//填充矩形为黄色
fillrectangle(150 + 30 * (x - 1), 350 - a[x] * 10, 180 + 30 * (x - 1), 350);//画有边框的填充矩形
//矩形坐标left 矩形左部 x 坐标。top 矩形顶部 y 坐标。right 矩形右部 x 坐标。bottom 矩形底部 y 坐标。
char num[20];
settextcolor(RED);//设置数字为红色
if (a[x] >= 0)
{
sprintf(num, "%d", a[x]);//类型转换,把整型转换为字符型
outtextxy(155 + 30 * (x - 1), 355, num);//把数字写到指定位置
}
else
{
sprintf(num, "%d", a[x]);//数字为负数时
outtextxy(155 + 30 * (x - 1), 330, num);
}
}
Sleep(250);
//冒泡排序
if (a[j] > a[j + 1])
{
//清除上一次排序要交换的两个矩形
clearrectangle(150 + 30 * (j - 1), 350 - a[j] * 10, 180 + 30 * (j - 1), 350);
clearrectangle(150 + 30 * j, 350 - a[j + 1] * 10, 180 + 30 * j, 350);
flag = true;//符合交换条件,标识为真,执行
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
cout << "\n第" << i << "趟 第" << ++p << "次排序结果为:\n";
//循环输出
for (int i = 1; i <= n; i++)
{
cout << a[i] << " ";
}
}
//两个数字交换、标出要交换的两个矩形
for (int z = j + 1; z >= j; z--)//数字交换
{
setfillcolor(0xFF55FF);//淡紫色
fillrectangle(150 + 30 * (z - 1), 350 - a[z] * 10, 180 + 30 * (z - 1), 350);//画出要交换的两个矩形
char num[20];
if (a[z] >= 0)
{
clearrectangle(150 + 30 * (z - 1), 350, 180 + 30 * (z - 1), 380);//清除
sprintf(num, "%d", a[z]);
outtextxy(155 + 30 * (z - 1), 355, num);//设置新的数字坐标
}
else
{
clearrectangle(150 + 30 * (z - 1), 380, 180 + 30 * (z - 1), 350);//清除
sprintf(num, "%d", a[z]);
outtextxy(155 + 30 * (z - 1), 330, num);//设置新的数字坐标
}
}
Sleep(2000);
}
//有交换时标识为true
if (flag == false) {//如果在一趟排序中一次都没交换过,结束
break;
}
else {
flag = false;//重置flag,
}
cout << "\t\n-------------第" << i << "趟排序的最终结果为:\t";
//循环输出
for (int i = 1; i <= n; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
cout << "冒泡排序后的结果,从小到大为:\n";
for (int i = 1; i <= n; i++)
{
cout << a[i] << " ";
}
_getch();//暂缓关闭
closegraph();//关闭画布
}
int main()
{
cout << "请输入要插入数组的个数:";
int n;//个数
cin >> n;
int a[20] = { 0 };
for (int i = 1; i <= n; i++)
{
cout << "请输入第" << i << "个元素:";
cin >> a[i];
}
cout << endl;
cout << "排序之前的顺序为:\n";
for (int i = 1; i <= n; i++)
{
cout << a[i] << " ";
}
BubbleSortUp(n, a);
system("pause");
return 0;
}