📄 permutationdlg.cpp
字号:
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 + -