c++实现ui冒泡动态联动+easyx库

代码如下

#include<iostream>
#include<easyx.h>
#include<graphics.h>
#include<conio.h>
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;
}


猜你喜欢

转载自blog.csdn.net/m0_53524766/article/details/128165199
今日推荐