⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 快速排序的简单程序
💻 C
字号:

#include <stdio.h>
#include <gtk/gtk.h>
#include <string.h>
#include <locale.h>
#define Max 50
static int tag=0;

char *_(char *c)
{
    return(g_locale_to_utf8(c,-1,NULL,NULL,NULL));
}

void callback(char * data )
{
    g_print ("Hello again - %s was pressed\n",data);
}

//////快速排序
void QuickSort_S(int  a[],int low,int high)// 升 序
{
	int i=low,j=high;
	int temp=a[low];
	while(i<j)
	{
		while(i<j&&temp<=a[j] )j--;
		if(i<j)
		{
			a[i]=a[j];
			i++;
		}
		while(i<j&&a[i]<temp) i++;
		if(i<j)
		{
			a[j]=a[i];
			j--;
		}
	}
	a[i]=temp;
	if(low<i) QuickSort_S(a,low,i-1);
	if(i<high)QuickSort_S(a,j+1,high);
}
void QuickSort_J(int  a[],int low,int high)// 降 序
{
	int i=low,j=high;
	int temp=a[low];
	while(i<j)
	{
		while(i<j&&temp>=a[j] )j--;
		if(i<j)
		{
			a[i]=a[j];
			i++;
		}
		while(i<j&&a[i]>temp) i++;
		if(i<j)
		{
			a[j]=a[i];
			j--;
		}
	}
	a[i]=temp;
	if(low<i) QuickSort_J(a,low,i-1);
	if(i<high)QuickSort_J(a,j+1,high);
}

void enter_callback( GtkWidget *widget,
                     GtkWidget *entry )
{
  const gchar *entry_text;
  entry_text = gtk_entry_get_text (GTK_ENTRY (entry));
  printf("Entry contents: %s\n", entry_text);

}
void get_value( GtkWidget *widget,GtkWidget *entry )
{
  GtkLabel *label;

  label = GTK_LABEL (g_object_get_data (G_OBJECT (widget), "user_data"));
  const char *buf;
  buf = gtk_entry_get_text (GTK_ENTRY (entry));
  gtk_label_set_text (label, buf);
}

void set_radio(GtkWidget *widget,gpointer data)
{
    tag=GPOINTER_TO_INT (data);
    //printf("tag : %d\n", tag);
    }

void sort( GtkWidget *widget,GtkWidget *entry )
{
 //GtkLabel *label;
  GtkEntry *en;
  en = GTK_ENTRY  (g_object_get_data (G_OBJECT (widget), "user_data1"));

  GtkLabel *label;
  label = GTK_LABEL (g_object_get_data (G_OBJECT (widget), "user_data"));
    char * b="";
   const char *buf="";
   char msg[Max]="";
   char out[Max]="";
   char k[]=" ";
   int num[Max];
  buf = gtk_entry_get_text (GTK_ENTRY (entry));
  //gtk_label_set_text (label, buf);
if(!(strcmp(buf,b)))
    {b=_("没有输入数据");gtk_label_set_text (label, b);}
else
{
  /////////// 字符转整形
		int i,ch,flag,n,value;i=flag=n=value=0;
		while (1)
		{
			ch=buf[i++];
			if (ch >= '0' && ch <= '9')
			{
				if (!flag) flag = 1;
				value=value*10 + (ch-'0');
			}
			else
			{
				if (flag)
				{
				num[n++]=value;
				flag = 0;
				value = 0;
				}
				if (ch == '\0') break;
			}
		}
    if(!n){b=_("输入错误");gtk_label_set_text (label, b);}
    else{
    if(tag!=0)QuickSort_J(num,0,n-1);
     else QuickSort_S(num,0,n-1);
    sprintf(out, "%d", num[0]);
    for(i=1;i<n;i++) {sprintf(msg, "%d", num[i]);strcat(out,k);strcat(out,msg);}

    printf("output : %s\n", out);
    b=_("排序结果");gtk_label_set_text (label, b);
    gtk_entry_set_text(GTK_ENTRY (en),out);
    }
}
}
void clear ( GtkWidget *widget,GtkWidget *entry )
{
    GtkEntry *en;
    en = GTK_ENTRY  (g_object_get_data (G_OBJECT (widget), "user_data1"));
    GtkLabel *label;
    label = GTK_LABEL (g_object_get_data (G_OBJECT (widget), "user_data"));
    char * b="";
    gtk_entry_set_text(GTK_ENTRY (entry),b);
    gtk_entry_set_text(GTK_ENTRY (en),b);
    b=_("排序结果");gtk_label_set_text (label, b);
    }
int main( int argc, char *argv[])
{
  GtkWidget *window;
  GtkWidget *entry;
  GtkWidget *label,*table,*button,*button1;
  GtkWidget *output,*out;
  GtkWidget *radio_button1,*radio_button2;
  GSList *group;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_title(GTK_WINDOW(window), "QuickSort");
  gtk_window_set_icon_from_file(GTK_WINDOW(window),"/home/lj2505/workspace/001/k.png",NULL);
  gtk_window_set_default_size(GTK_WINDOW(window), 300, 360);
  g_signal_connect_swapped(window, "destroy",
      G_CALLBACK (gtk_main_quit), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 20);

setlocale(LC_CTYPE, "");

  table = gtk_table_new (12, 5, TRUE);
  gtk_container_add(GTK_CONTAINER(window), table);
  label = gtk_label_new(_("输入"));
gtk_table_attach_defaults (GTK_TABLE (table),  label , 0,5, 0, 1);//放入表格

entry = gtk_entry_new();
gtk_table_attach_defaults (GTK_TABLE (table),entry , 0,5, 1, 2);

    radio_button1= gtk_radio_button_new_with_label (NULL, _("升序"));
    gtk_table_attach_defaults (GTK_TABLE (table),radio_button1 , 1,2, 3, 4);
    g_signal_connect(G_OBJECT (radio_button1), "released", G_CALLBACK (set_radio), GINT_TO_POINTER (0));
    gtk_widget_show (radio_button1);

    group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_button1));
    radio_button2 = gtk_radio_button_new_with_label (group, _("降序"));
    gtk_table_attach_defaults (GTK_TABLE (table),radio_button2 , 3,4, 3, 4);
    g_signal_connect (G_OBJECT (radio_button2), "released", G_CALLBACK (set_radio), GINT_TO_POINTER (1));
    gtk_widget_show (radio_button2);


button = gtk_button_new_with_label(g_convert("排序",-1,"UTF-8","GB2312",NULL,NULL,NULL));
gtk_table_attach_defaults (GTK_TABLE (table),button , 1,2, 5, 6);
g_signal_connect (G_OBJECT (button), "clicked",
                G_CALLBACK (sort),
                entry);

button1 = gtk_button_new_with_label(_("清除"));
gtk_table_attach_defaults (GTK_TABLE (table),button1 , 3,4, 5, 6);
g_signal_connect (G_OBJECT (button1), "clicked", G_CALLBACK (clear),entry);

output = gtk_label_new ("");
g_object_set_data (G_OBJECT (button), "user_data", output);
g_object_set_data (G_OBJECT (button1), "user_data", output);
gtk_label_set_text (GTK_LABEL (output), _("排序结果"));
gtk_table_attach_defaults (GTK_TABLE (table),output , 0,5 , 7, 8);


out = gtk_entry_new();
g_object_set_data (G_OBJECT (button), "user_data1", out);
g_object_set_data (G_OBJECT (button1), "user_data1", out);
gtk_table_attach_defaults (GTK_TABLE (table),out ,0,5, 8, 9);



gtk_widget_show (table);


  gtk_widget_show_all(window);

  gtk_main();

  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -