Linux课程设计之排序

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值