C++排序算法利用EsayX实现过程可视化
首先去网上下载EsayX C++图形库。
复制使用看效果
未完工
#include<stdio.h>
#include<graphics.h>
#include<time.h>
#include<windows.h>
#include<cstdio>
#include <iostream>
using namespace std;
#define AA 320
#define MAP_ROW 322
#define MAP_COL 322
#define WANH 2
int AAA=0;
void initGraphics(int* arr,int length)
{
initgraph(MAP_COL * WANH,MAP_ROW * WANH, EW_SHOWCONSOLE);
setorigin(WANH, WANH);
setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 1);
rectangle(0, 0, (MAP_COL - 2) * (WANH), (MAP_ROW - 2) * (WANH));
setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 1);
setfillcolor(RGB(30, 80, 255));
for (int i = 0; i < length; i++)
{
fillrectangle(WANH * i, WANH * (MAP_ROW - 2), WANH * (i + 1), WANH * (MAP_ROW - arr[i] - 2));
}
}
void draw(int* arr,int a ,int b)
{
setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 0);
setfillcolor(RGB(0, 0, 0));
solidrectangle(WANH * a, WANH * (MAP_ROW - arr[a] - 2), WANH * (a + 1), WANH * (MAP_ROW-2));
solidrectangle(WANH * b, WANH * (MAP_ROW - arr[b] - 2), WANH * (b + 1), WANH * (MAP_ROW - 2));
line(0, 0, (MAP_COL-2) * WANH, 0);
if (a == 0)
{
line(WANH * a, WANH * (0), WANH * (a), WANH * (MAP_ROW));
}
else if (arr[a -1] < arr[a])
{
line(WANH * a, WANH * (MAP_ROW - arr[a-1] - 2 ), WANH * (a), WANH * (MAP_ROW - 2));
}
else
{
line(WANH * a, WANH * (MAP_ROW - arr[a] - 2 ), WANH * (a), WANH * (MAP_ROW - 2));
}
if (a == AA)
{
line(WANH * (a), WANH * (0), WANH * (a), WANH * (MAP_ROW-2));
}
else if (arr[a + 1] < arr[a])
{
line(WANH * a, WANH * (MAP_ROW - arr[a ] - 2), WANH * (a), WANH * (MAP_ROW - 2));
}
else
{
line(WANH * (a + 1), WANH * (MAP_ROW - arr[a] - 2), WANH * (a + 1), WANH * (MAP_ROW - 2));
}
if (b == 0)
{
line(WANH * b, WANH * (0), WANH * (b), WANH * (MAP_ROW-2));
}
else if (arr[b -1] < arr[b])
{
line(WANH * b, WANH * (MAP_ROW - arr[b - 1] - 2), WANH * (b), WANH * (MAP_ROW - 2));
}
else
{
line(WANH * b, WANH * (MAP_ROW - arr[b] - 2), WANH * (b), WANH * (MAP_ROW - 2));
}
if (b == AA)
{
line(WANH * (b), WANH * (0), WANH * (b), WANH * (MAP_ROW));
}
else if (arr[b + 1] < arr[b])
{
line(WANH * b, WANH * (MAP_ROW - arr[b + 1] - 2), WANH * (b), WANH * (MAP_ROW - 2));
}
else
{
line(WANH * (b + 1), WANH * (MAP_ROW - arr[b] - 2), WANH * (b + 1), WANH * (MAP_ROW - 2));
}
setfillcolor(RGB(30, 80, 255));
fillrectangle(WANH * b, WANH * (MAP_ROW - 2), WANH * (b + 1), WANH * (MAP_ROW - arr[a] - 2));
fillrectangle(WANH * a, WANH * (MAP_ROW - 2), WANH * (a + 1), WANH * (MAP_ROW - arr[b] - 2));
}
void draw(int* arr,int length)
{
clearrectangle(0, 0, (MAP_COL - 2) * (WANH), (MAP_ROW - 2) * (WANH));
setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 1);
for (int i = 0; i < length ; i++)
{
fillrectangle(WANH * i, WANH * (MAP_ROW - 2), WANH * (i + 1), WANH * (MAP_ROW - arr[i] - 2));
}
}
void fun1(int* arr, int length)
{
for (int i = 0; i < length-1; i++)
{
for (int j = 0; j < length - i-1; j++)
{
if (arr[j] > arr[j + 1])
{
AAA++;
draw(arr,j+1,j);
arr[j] = arr[j + 1] ^ arr[j];
arr[j+1] = arr[j + 1] ^ arr[j];
arr[j] = arr[j + 1] ^ arr[j];
}
}
}
}
void xuanze(int* arr,int o,int tmp)
{
clock_t start, end;
AAA = 0;
initGraphics(arr,o);
start = clock();
fun1(arr,o);
end = clock();
cout << "用时: " << double(end - start) / CLOCKS_PER_SEC << "s" << endl;
cout << "步数:" << AAA;
}
void drawNumber()
{
int arr[AA] = {};
srand((unsigned int)time(NULL));
int tmp;
int o= sizeof(arr) / sizeof(int);
for (int i = 1; i < o+1;)
{
tmp = (rand() % AA);
if (arr[tmp] == 0)
{
arr[tmp] = i;
i++;
}
}
printf("\t\t");
printf("随机数已生成,请选择将要使用排序方法:(320个数据)\n\n");
int xz;
printf("\t1.冒泡排序\t\n");
cin >> xz;
xuanze(arr,o, xz);
while(1)
{
Sleep(1 * 400);
}
return ;
}
void main()
{
drawNumber();
}