include <stdio.h>
include <string.h>
include <SDL.h>
include <SDL_draw.h>
include <SDL_ttf.h>
include <stdlib.h>
include <time.h>
define TRUE 1
define FALSE 0
SDL_Surface *screen,*text;
SDL_Rect drect; /*目标矩形*/
TTF_Font *font; /*文字样式对象*/
SDL_Color red={ 255, 0, 0, 0 }; /* 设置字体颜色 */
SDL_Event ev;
int fontsize=20; /* 设置字体大小为38 */
int ary[10];
char str1[100]="请选择要排序的算法";
char str2[100]="1、选择排序 2、冒泡排序 3、快速排序 4、插入排序 5、归并排序 ";
char str3[100]="6、更新一组随机数组";
void addtext(char str[])
{ puts(str);
text=TTF_RenderUTF8_Blended(font,str,red);
drect.x=0;
drect.y+=20;
drect.w=text->w; /*目标矩形的宽和高分别是所写字的宽和高*/
drect.h=text->h;
SDL_BlitSurface(text, NULL, screen, &drect); /*把目标对象快速转化*/
SDL_UpdateRect(screen,0,0,0,0);
}
void setary()
{
char temp[10];
int i;
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0xFF, 0xFF, 0xFF));
SDL_UpdateRect(screen,0,0,0,0);
drect.x=0;
drect.y=-20;
char str[100]="随机产生一组随机数";
char sary[100]="初始数组:";
srand((int)time(NULL));
for(i = 0;i<10;i++)
{
ary[i]=rand()%100;
sprintf(temp,"%d ",ary[i]);
strcat(sary,temp);
}
addtext(sary);addtext(str);addtext(str1);addtext(str2);
}
void SelectSort(int ary[])
{
int index,i,j,k;
char temp[10];
char sary[100]="";
for(i = 0;i<10;i++)
{
index=i;
for(j =i+1;j<10;j++)
{
if(ary[j]<ary[index])
index=j;
}
if (index!=i)
{
int temp=ary[i];
ary[i]=ary[index];
ary[index]=temp;
}
for(k = 0;k<10;k++)
{
sprintf(temp,"%d ",ary[k]);
strcat(sary,temp);
}SDL_Delay(500);
addtext(sary);
strcpy(sary,"");
}
strcpy(sary,"选择排序后:");
for(i = 0;i<10;i++)
{
sprintf(temp,"%d ",ary[i]);
strcat(sary,temp);
} SDL_Delay(500);
addtext(sary);
}
void BubbleSort(int ary[])
{
int i,j,k;
char temp[10];
char sary[100]="";
int flag=TRUE;
while(flag==TRUE)
{
for(i = 1;i<10;i++)
{
flag=FALSE;
for(j =9;j>=i;j--)
{
if(ary[j-1]>ary[j])
{
int temp=ary[j];
ary[j]=ary[j-1];
ary[j-1]=temp;
flag=TRUE;
}
}
for(k = 0;k<10;k++)
{
sprintf(temp,"%d ",ary[k]);
strcat(sary,temp);
}SDL_Delay(500);
addtext(sary);
strcpy(sary,"");
if (flag==FALSE)
break;
}
}
strcpy(sary,"冒泡排序后:");
for(i = 0;i<10;i++)
{
sprintf(temp,"%d ",ary[i]);
strcat(sary,temp);
}SDL_Delay(500);
addtext(sary);
}
void Qsort(int a[],int low,int high)
{
int start = low;
int end = high;
int key = a[low];
char temp[10];
char sary[100]="";
int i;
while(end>start)
{
while(end>start&&a[end]>=key)
end--;
a[start]=a[end];
while(end>start&&a[start]<=key)
start++;
a[end]=a[start];
}
a[start]=key;
if (start>low)
{
Qsort(a,low,start-1);
}
if (end<high)
{
Qsort(a,end+1,high);
}
for(i = 0;i<10;i++)
{
sprintf(temp,"%d ",a[i]);
strcat(sary,temp);
}SDL_Delay(500);
addtext(sary);
}
void Quitsort(int ary[])
{
int i;
char temp[10];
char sary[100]="";
int start = 0;
int end = 9;
Qsort(ary,start,end);
strcpy(sary,"快速排序后:");
for(i = 0;i<10;i++)
{
sprintf(temp,"%d ",ary[i]);
strcat(sary,temp);
}SDL_Delay(500);
addtext(sary);
}
void InserSort(int ary[])
{
int temp;//存放变量
char ctemp[10];
char sary[100]="";
int i,j,k;
for (i = 1; i < 10; i++)
{
j = i;//令j等于i,j向前遍历
temp = ary[i];
while (j > 0 && temp < ary[j - 1])//临时变量的前一个数如果比临时变量大,则向前移动一格,直到j等于0
{
ary[j] = ary[j - 1];
j--;
}
ary[j] = temp;
for(k = 0;k<10;k++)
{
sprintf(ctemp,"%d ",ary[k]);
strcat(sary,ctemp);
}SDL_Delay(500);
addtext(sary);
strcpy(sary,"");
}
strcpy(sary,"插入排序后:");
for(i = 0;i<10;i++)
{
sprintf(ctemp,"%d ",ary[i]);
strcat(sary,ctemp);
}SDL_Delay(500);
addtext(sary);
}
void Merge(int a[],int start,int mid,int end) {
int tmp[10];
char ctemp[10];
char sary[100]="";
int i = start, j = mid + 1, k = start;
while (i < mid + 1 && j <= end) {
if (a[i] < a[j])
tmp[k++] = a[i++];
else
tmp[k++] = a[j++];
}
while (i < mid + 1)
tmp[k++] = a[i++];
while (j < end + 1)
tmp[k++] = a[j++];
for (i = start; i <= end; i++)
a[i] = tmp[i];
for(k = 0;k<10;k++)
{
sprintf(ctemp,"%d ",a[k]);
strcat(sary,ctemp);
}SDL_Delay(500);
addtext(sary);
strcpy(sary,"");
}
void Msort(int ary[],int start,int end)
{
if (start>=end)
{
return;
}
else{
int m=(start+end)/2;
Msort(ary,start,m);
Msort(ary,m+1,end);
Merge(ary,start,m,end);
}
}
void MergingSort(int ary[])
{
int i;
char ctemp[10];
char sary[100]="";
Msort(ary,0,9);
strcpy(sary,"归并排序后:");
for(i = 0;i<10;i++)
{
sprintf(ctemp,"%d ",ary[i]);
strcat(sary,ctemp);
}SDL_Delay(500);
addtext(sary);
}
int getEven(int ary[]) {
int quit = 1;
//while (!quit)
{
while (SDL_PollEvent(&ev))
{
if (SDL_MOUSEBUTTONDOWN == ev.type)
{
if(SDL_BUTTON_LEFT == ev.button.button)
{
int px = ev.button.x;
int py = ev.button.y;
printf("%d ,%d----------------\n",px,py);
}
}
else if(SDL_KEYDOWN == ev.type)
{
setary();
//printf("key %s Dowm!\n", SDL_GetKeyName(ev.key.keysym.sym));
if(SDLK_1 == ev.key.keysym.sym)
{
printf("key %s 选择排序\n", SDL_GetKeyName(ev.key.keysym.sym));
SelectSort(ary);
}
else if(SDLK_2 == ev.key.keysym.sym)
{
printf("key %s 冒泡排序\n", SDL_GetKeyName(ev.key.keysym.sym));
BubbleSort(ary);
}
else if(SDLK_3 == ev.key.keysym.sym)
{
printf("key %s 快速排序\n", SDL_GetKeyName(ev.key.keysym.sym));
Quitsort(ary);
}
else if(SDLK_4 == ev.key.keysym.sym)
{
printf("key %s 插入排序\n", SDL_GetKeyName(ev.key.keysym.sym));
InserSort(ary);
}
else if(SDLK_5 == ev.key.keysym.sym)
{
printf("key %s 归并排序\n", SDL_GetKeyName(ev.key.keysym.sym));
MergingSort(ary);
}
else if(SDLK_6 == ev.key.keysym.sym)
{
printf("key %s 更新一组随机数组\n", SDL_GetKeyName(ev.key.keysym.sym));
setary();
}
}
else if (SDL_QUIT == ev.type)
{
printf("SDL_QUIT ...............\n");
quit=0;
}
}
}
return quit;
}
int inin()
{
/*除了屏幕指针外,把文字也看做是一个surface,指针text指向文字屏幕*/
if(SDL_Init(SDL_INIT_VIDEO)) {
printf( "Could not initialize SDL - %s\n", SDL_GetError());
return -1;
}
int a=1;
/*除了屏幕指针外,把文字也看做是一个surface,指针text指向文字屏幕*/
screen=SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0xFF, 0xFF, 0xFF));
atexit(SDL_Quit);
if(!screen) {
printf("SDL: could not create window - exiting:%s\n",SDL_GetError());
return -1;
}
if(TTF_Init()!=0){ /* 初始化字体*/
fprintf(stderr, "Can't init ttf font!\n");
exit(1);
}
/* 打开字体库*/
font=TTF_OpenFont("/usr/share/fonts/SIMSUN.TTC",fontsize);
if(!font)
{
printf("TTF_OpenFont: Open SIMSUN.TTC %s\n", TTF_GetError());
return -1;
}
TTF_SetFontStyle(font,TTF_STYLE_NORMAL); /* 设置字体样式 */
}
int main()
{
inin();
int i,n;
int a=1;
char temp[10];
char str[100]="随机产生一组随机数";
char sary[100]="初始数组:";
srand((int)time(NULL));
for(i = 0;i<10;i++)
{
ary[i]=rand()%100;
sprintf(temp,"%d ",ary[i]);
strcat(sary,temp);
}
drect.x=0;
drect.y=-20;
addtext(str);
addtext(sary);
addtext(str1);
addtext(str2);
addtext(str3);
while(a==1)
{
SDL_Delay(10);
a=getEven(ary);
}
return 0;
}
Linux课程设计之排序
最新推荐文章于 2019-07-24 09:33:49 发布