C++排序算法利用EsayX实现过程可视化

C++排序算法利用EsayX实现过程可视化

    首先去网上下载EsayX C++图形库。
      
	复制使用看效果
	
	未完工
// 草稿.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#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)
{
    //TCHAR s[2];
    /*初始化界面*/
    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));
    }
    //Sleep(4000);
}
//绘制   
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));//画无边框的填充矩形(覆盖a所在矩形)
    solidrectangle(WANH * b, WANH * (MAP_ROW - arr[b] - 2), WANH * (b + 1), WANH * (MAP_ROW - 2));//画无边框的填充矩形(覆盖b所在矩形)
    //交换时画线
    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));
    }
    //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));
    }
    //line(WANH * b, WANH * (MAP_ROW - arr[b] - 2 + 1), WANH * b, WANH * (MAP_ROW - 2));
    //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)
{
    //setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 4);//画笔设置
    clearrectangle(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 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++;
                //Sleep(100000);
                draw(arr,j+1,j);
                //Sleep(1 *1);
                arr[j] = arr[j + 1] ^ arr[j];
                arr[j+1] = arr[j + 1] ^ arr[j];
                arr[j] = arr[j + 1] ^ arr[j];
                //draw(arr, length);
            }

        }
    }

}

//void main()
//{
//    TCHAR s[2];
//    /*初始化界面*/
//    initgraph(MAP_COL * WANH, MAP_ROW * WANH, EW_SHOWCONSOLE);//生成
//    setorigin(WANH, WANH);//坐标原点设置
//    setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 4);//画笔设置
//    rectangle(0, 0, (MAP_COL - 2) * (WANH), (MAP_ROW - 2) * (WANH));
//    //画空心矩形
//    setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 1);//画笔设置
//    for (int i = 0; i < (WANH) * (MAP_COL - 2);)
//    {
//
//        //setlinecolor(WHITE);
//        line(i, 0, i, (MAP_ROW - 2) * WANH);
//
//        i = WANH + i;
//    }
//    for (int i = 0; i < (WANH) * (MAP_ROW - 2);)
//    {
//        line(0, i, (MAP_COL - 2) * WANH, i);
//        i = WANH + i;
//    }
//    setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 1);
//    while (1)
//    {
//        Sleep(1 * 10000);
//
//    }
//    setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 4);//画笔设置
//    rectangle(0, 0, (MAP_COL - 2) * (WANH), (MAP_ROW - 2) * (WANH));
//}
// 


//选择
void xuanze(int* arr,int o,int tmp)
{
    clock_t start, end;
    AAA = 0;
    initGraphics(arr,o);
    //getchar();
    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);

    //for (int i = 0; i < o; i++)
    //{
    //    printf("%4d", arr[i]);
    //}
    //draw(arr, 12, 5);
    //draw(arr, 60, 1);
    //draw(arr, 3, 20);
    //draw(arr, 40, 41);
    while(1)
    {
        Sleep(1 * 400);

    }
    return ;
}

void main()
{
    drawNumber();

}

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
排序算法可视化是指通过图形或动画的方式展示排序算法的执行过程,使得算法的执行步骤更加直观和易于理解。C语言可以通过图形库或图形界面库来实现排序算法可视化。 一种常见的实现方式是使用C语言结合图形库如OpenGL或SDL来创建一个窗口,然后在窗口中绘制出待排序的数据,在排序算法执行的每一个关键步骤中,通过改变绘制的元素的颜色或位置来表示元素的排序状态。 以冒泡排序为例,可以通过不断比较相邻元素的大小,并交换它们的位置来实现排序。在可视化中,可以将未排序的元素绘制成不同的颜色或形状,然后在每一次比较和交换后更新元素的位置或颜色,使得用户可以观察到元素的移动和交换过程。通过这种方式,可以清晰地展示冒泡排序的核心思想和算法执行的过程。 另外,还可以通过在不同的排序阶段添加适当的延时来控制算法的执行速度,使得用户能够更加详细地观察算法的每一个步骤。这样,用户就可以通过观察排序算法可视化过程来更好地理解和掌握排序算法的原理和操作。 总之,通过使用C语言和图形库可以实现排序算法可视化,使得算法的执行过程更加直观和易于理解。这种可视化的方法不仅可以提高用户对算法的理解度,还可以帮助用户更好地掌握和应用不同的排序算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值