回复 7# 界水乘风 的帖子 帮我个忙好吗?
#include "1.h"
void Init1(int a[]);
void Pre(int a[],int n);
void DrawChange(int i,int j);
void Bubble_sort(int a[],int n);
void _main2(void)
{
int i,a[N];
int gd=DETECT,gm;/*定义图形的驱动器变量和模式变量,驱动变量为自动检测*/
initgraph(&gd,&gm,"d:\\tc");/*此处为turboc的路径*/
cleardevice();/*清除屏幕*/
printf("Please enter 8 int number\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
Init1(a);
Bubble_sort(a,8);
getch();
}
void Init1(int a[])
{
int gd=DETECT,gm,i;
initgraph(&gd,&gm,"d:\\tc");
cleardevice();
setcolor(YELLOW);/*设置系统当前的颜色*/
outtextxy(210,10,"any key to continue");
Pre(a,40);
getch();
setfillstyle(EMPTY_FILL,BLACK);
bar(400,20,200,10);
}
void Pre(int a[],int n)
{
int i;
char num[5];
settextstyle(0,0,2);
setcolor(BLUE);/*设置系统当前的颜色*/
for(i=100;i<500;i+=50)
{
sprintf(num,"%d",a[(i-100)/50]);
outtextxy(i,n,num);
}
}
void DrawChange(int i,int j)/*画交换箭头程序*/
{
setcolor(6);
line(j*50+120,i+8,j*50+140,i+8);
line(j*50+120,i+8,j*50+120+5,i+4);
line(j*50+120,i+8,j*50+120+5,i+12);
line(j*50+140,i+8,j*50+140-5,i+4);
line(j*50+140,i+8,j*50+140-5,i+12);
}
void Bubble_sort(int a[],int n)/*冒泡排序*/
{
int i,j,t,flag;
char num1[5],num2[5];
for(i=0;i<n-1;i++)
{
flag=0;
for(j=0;j<n-1-i;j++)
{
Pre(a,i*40+80);
setcolor(GREEN);/*设置系统当前的颜色*/
sprintf(num1,"%d",a[j]);/*把整数a[j] 打印成一个字符串保存在num1 中*/
outtextxy(100+j*50,i*40+80,num1);/*在屏幕上指定位置输出字符串*/
sprintf(num2,"%d",a[j+1]);
outtextxy(100+(j+1)*50,i*40+80,num2);
sleep(1);
setfillstyle(SOLID_FILL,BLACK);/*填充图形*/
bar(0,i*40+60,640,i*40+100);
if(a[j]>a[j+1])
{
flag=1;
DrawChange(i*40+80,j);/*画交换箭头*/
setcolor(RED);
outtextxy(100+j*50,i*40+80,num1);
outtextxy(100+(j+1)*50,i*40+80,num2);
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
sleep(1);
setfillstyle(SOLID_FILL,BLACK);
bar(0,i*40+60,640,i*40+100);
}
}
Pre(a,i*40+80);
sleep(1);
setcolor(YELLOW);
outtextxy(210,400,"any key to return");
if(flag==0)break;
}
}
这个是冒泡的程序:
这个程序的第2行到第5行的作用是什么啊?N的值为多少?在何处定义的啊?INIT1(a[])中的数组a[]作用?初始化为什么有2次啊?箭头函数的对应哪里的5个line.