这学期的线下C语言课程,大一同学们学完数组排序后,布置了一次数组排序算法可视化的作业,给了大家1天时间独立完成,通过可视化加深对排序算法的理解。
下面给出了四位同学的实现效果和代码,大家可以参考。
源代码1:
#include<stdio.h>
#include<time.h>
#include<graphics.h>
#include<string.h>
#define WEIGHT 30
int a[12];
int p, k;
void startup()
{
srand(time(0));
initgraph(600, 400);
setbkcolor(RGB(150, 150, 150));
cleardevice();
BeginBatchDraw();
}
void show()
{
for (int i = 0; i < 12; i++)
{
if (p == i)
{
setfillcolor(GREEN);
setlinecolor(GREEN);
}
if (k < i)
{
setfillcolor(RED);
setlinecolor(RED);
}
fillrectangle(30 + 45 * i, 350 - a[i] * 10, 30 + WEIGHT + 45 * i, 350);
TCHAR t[50];
_stprintf_s(t, _T("%d"), a[i]);
settextcolor(WHITE);
settextstyle(15, 0, _T("宋体"));
if (a[i] > 10)
outtextxy(38 + 45 * i, 330 - a[i] * 10, t);
else
outtextxy(41 + 45 * i, 330 - a[i] * 10, t);
setfillcolor(WHITE);
setlinecolor(WHITE);
}
FlushBatchDraw();
Sleep(500);
}
void WRITE()
{
TCHAR s[50];
_stprintf_s(s, _T("绿色方块向后运行,如果遇到比它大的方块,就会把动力和身上的绿色传给它"));
settextcolor(RED);
settextstyle(15, 0, _T("宋体"));
outtextxy(50, 30, s);
}
int main()
{
int i, t;
startup();
for (i = 0; i < 12; i++)
{
a[i] = rand() % 24 + 3;
}
for (i = 11; i > 0; i--)
{
k = i;
p = 0;
WRITE();