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

📄 permutationdlg.cpp

📁 是用语数据结构的课程设计的程序,并且用MFC做了图形界面
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			else
				low=m+1;
		}
		for(j=i-1;j>=high+1;--j)
			array[k][j+1]=array[k][j];
		array[k][high+1]=array[k][0];

		k++;

		for(t=0;t<=10;t++)
			array[k][t]=array[k-1][t];
   }
   count=k-1;
}


/**********************************************************************************************/			
void CPermutationDlg::ShellInsert(int l)
{   
	k++;
	for(i=l+1;i<=10;++i)
	{
		if(array[k][i]<array[k][i-l])
		{
			array[k][0]=array[k][i];
		    for(j=i-l; j>0 && array[k][0]<array[k][j] ;j-=l)
			     array[k][j+l]=array[k][j];

		    array[k][j+l]=array[k][0];
		}

	}	
	for(t=0;t<=10;t++)
			array[k+1][t]=array[k][t];
	count=k;
}

//希尔排序
void CPermutationDlg::OnXier() 
{    
    ToolType=1;
	k=0;
	array[0][1]=array[1][1]=GetDlgItemInt(IDC_NUM1); 
    array[0][2]=array[1][2]=GetDlgItemInt(IDC_NUM2); 
	array[0][3]=array[1][3]=GetDlgItemInt(IDC_NUM3); 
	array[0][4]=array[1][4]=GetDlgItemInt(IDC_NUM4); 
	array[0][5]=array[1][5]=GetDlgItemInt(IDC_NUM5); 
	array[0][6]=array[1][6]=GetDlgItemInt(IDC_NUM6); 
	array[0][7]=array[1][7]=GetDlgItemInt(IDC_NUM7); 
	array[0][8]=array[1][8]=GetDlgItemInt(IDC_NUM8); 
	array[0][9]=array[1][9]=GetDlgItemInt(IDC_NUM9); 
	array[0][10]=array[1][10]=GetDlgItemInt(IDC_NUM10);

	for(i=0;i<=10;i++)
	{
		if(array[0][i]<-32768 || array[0][i]>32767)
			flag=1;
	}

	for(s=5;s>0;s--) //增量从5起每次减1递减
		CPermutationDlg::ShellInsert(s);
}


/******************************************************************************************/
int CPermutationDlg::Partition(int low,int high)
{   
	int pivotkey;
	
    array[k][0]=array[k][low];
    pivotkey=array[k][low];
	while(low<high)
	{
		while(low<high && array[k][high]>=pivotkey)
			--high;
		array[k][low]=array[k][high];

		while(low<high && array[k][low]<=pivotkey)
			++low;
		array[k][high]=array[k][low];		
	}

	count++;
	array[k][low]=array[k][0];

    for(t=0;t<=10;t++)
		array[k+1][t]=array[k][t];
	k++;

	return low;
}

void CPermutationDlg::QSort(int low,int high)
{
	int pivotloc;
	if(low<high)
	{   
		pivotloc=Partition(low,high);
		QSort(low,pivotloc-1);
		QSort(pivotloc+1,high);
	}
   
}

//快速排序
void CPermutationDlg::OnKuaisu() 
{
	ToolType=1;
    count=0;
    k=1;

	array[0][1]=array[1][1]=GetDlgItemInt(IDC_NUM1); 
    array[0][2]=array[1][2]=GetDlgItemInt(IDC_NUM2); 
	array[0][3]=array[1][3]=GetDlgItemInt(IDC_NUM3); 
	array[0][4]=array[1][4]=GetDlgItemInt(IDC_NUM4); 
	array[0][5]=array[1][5]=GetDlgItemInt(IDC_NUM5); 
	array[0][6]=array[1][6]=GetDlgItemInt(IDC_NUM6); 
	array[0][7]=array[1][7]=GetDlgItemInt(IDC_NUM7); 
	array[0][8]=array[1][8]=GetDlgItemInt(IDC_NUM8); 
	array[0][9]=array[1][9]=GetDlgItemInt(IDC_NUM9); 
	array[0][10]=array[1][10]=GetDlgItemInt(IDC_NUM10);

	for(i=0;i<=10;i++)
	{
		if(array[0][i]<-32768 || array[0][i]>32767)
			flag=1;
	}

	QSort(1,10);
}


/*********************************************************************************************/
//冒泡排序
void CPermutationDlg::OnMaopao() 
{
	int flag=1;
	int temp;
	ToolType=1;

	array[0][1]=array[1][1]=GetDlgItemInt(IDC_NUM1); 
    array[0][2]=array[1][2]=GetDlgItemInt(IDC_NUM2); 
	array[0][3]=array[1][3]=GetDlgItemInt(IDC_NUM3); 
	array[0][4]=array[1][4]=GetDlgItemInt(IDC_NUM4); 
	array[0][5]=array[1][5]=GetDlgItemInt(IDC_NUM5); 
	array[0][6]=array[1][6]=GetDlgItemInt(IDC_NUM6); 
	array[0][7]=array[1][7]=GetDlgItemInt(IDC_NUM7); 
	array[0][8]=array[1][8]=GetDlgItemInt(IDC_NUM8); 
	array[0][9]=array[1][9]=GetDlgItemInt(IDC_NUM9); 
	array[0][10]=array[1][10]=GetDlgItemInt(IDC_NUM10);
    k=1;

	for(i=0;i<=10;i++)
	{
		if(array[0][i]<-32768 || array[0][i]>32767)
			flag=1;
	}

	for (i=10; i>1 && flag; --i)
	{
		flag = 0;
		for ( j=1; j<i; ++j)
		{
			if (array[k][j+1]<array[k][j])
			{
				temp=array[k][j];
				array[k][j]=array[k][j+1];
			    array[k][j+1]=temp;
				flag = 1;
			}
		}

	    if(flag)
		{	k++;
            for(t=0;t<=10;t++)
			array[k][t]=array[k-1][t];
		}
	}
	count=k-1;
}


/*********************************************************************************************/
//简单选择排序
void CPermutationDlg::OnJiandanxuanze() 
{ 
	int temp;
    ToolType=1;
    
	array[0][1]=array[1][1]=GetDlgItemInt(IDC_NUM1); 
    array[0][2]=array[1][2]=GetDlgItemInt(IDC_NUM2); 
	array[0][3]=array[1][3]=GetDlgItemInt(IDC_NUM3); 
	array[0][4]=array[1][4]=GetDlgItemInt(IDC_NUM4); 
	array[0][5]=array[1][5]=GetDlgItemInt(IDC_NUM5); 
	array[0][6]=array[1][6]=GetDlgItemInt(IDC_NUM6); 
	array[0][7]=array[1][7]=GetDlgItemInt(IDC_NUM7); 
	array[0][8]=array[1][8]=GetDlgItemInt(IDC_NUM8); 
	array[0][9]=array[1][9]=GetDlgItemInt(IDC_NUM9); 
	array[0][10]=array[1][10]=GetDlgItemInt(IDC_NUM10);
	
	for(i=0;i<=10;i++)
		if(array[0][i]<-32768 || array[0][i]>32767)
			flag=1;

    k=1;
	for(i=1;i<10;++i)                                   
	{
		for ( j=i+1;j<=10;++j)
		{   	
			if (array[k][j]<array[k][i])  
			{
		    	temp=array[k][i];
			    array[k][i]=array[k][j];
	            array[k][j]=temp; 
			}
		}
        for(t=0;t<=10;t++)
		array[k+1][t]=array[k][t];
		k++;
	}
    count=k-1;
}


/*********************************************************************************************/
//按下“查看所有排序结果”按钮
void CPermutationDlg::OnViewall() 
{ 
	if(!ToolType) 
		AfxMessageBox("请选择排序方法");

	 else if(flag==1)
		  AfxMessageBox("请输入[-32768,32767]间的整数");
     else
     {
		CString st[11];  //以字符串形式显示每次的排序结果 
        for (t=0;t<=count;t++)
		{
	    	st[t].Format(" 第%d次排序 %d, %d ,%d ,%d ,%d ,%d ,%d ,%d ,%d ,%d \n",t,array[t][1],array[t][2],array[t][3],array[t][4],array[t][5],array[t][6],array[t][7],array[t][8],array[t][9],array[t][10]);
            st[10]=st[10]+st[t];
		}

        AfxMessageBox(st[10],MB_ICONINFORMATION);
	 }

    
		
	
}
   

/***************************************************************************************/
//空函数。为了防止用户在输入数据后按Enter结束程序,设置此函数,使Enter键无效
void CPermutationDlg::OnOK() 
{
	// TODO: Add extra validation here
	
	
}

/****************************************************************************************/
//“软件说明”按钮
void CPermutationDlg::OnShuoming() 
{
	CString sm;
	sm.Format("                                    软件功能\n  用户可以输入10个范围在[-32768-32767]内的整数,并且选择想要采用的排序方法。Permutation\n程序将采用该排序方法对输入的整数进行排序。用户可以查看任意一次的排序结果,也可以一次性\n查看所有排序过程。\n  若用户在窗口输入的排序整数不合法,结果将全显示为0。若用户未选择排序方法,系统将给出提示,\n请用户选择排序方法。若用户在选择查看某次排序结果时,输入的排序次数小于0或大于实际排序次数,\n系统将给出正确的排序次数范围,提示用户重新输入。\n  如果用户还想再用另一种排序方法查看结果,只需更改排序方法的选择而不用重新在外输入数据。\n但如果用户在排序之后,想改变参加排序的某个数据,则更改之后,请重新选择排序方法。");  
   AfxMessageBox(sm,MB_ICONINFORMATION);
	
}

⌨️ 快捷键说明

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