📄 sortdlg.cpp
字号:
strNum.Format("%d",sortObject[objectName[j]].iNumber);
}
dc.TextOut(objectCoord[sortObject[objectName[j]].iSeq].x-15,
objectCoord[sortObject[objectName[j]].iSeq].y-30,
strNum);
TRACE("\n");
for(int w=0;w<SORT_OBJECT_NUM;w++)
{
TRACE("%d ",sortObject[objectName[w]].iNumber);
}
//延迟1S进行下一轮排序以便于动画显示
Sleep(1000);
}
}
}
}
void CSortDlg::OnExchangeSort()
{
CClientDC dc (this) ;
dc.SetBkColor(RGB(100,100,255));
dc.FillRect(&CRect(0,0,250,150),&CBrush(RGB(100,100,255)));
int objectName[SORT_OBJECT_NUM]; //每个位置对应的待排序对象名
//初始化每个位置对应的待排序对象名
for(int i=0;i<SORT_OBJECT_NUM;i++)
{
objectName[i] = i;
}
TRACE("\n");
for(int w=0;w<SORT_OBJECT_NUM;w++)
{
TRACE("%d ",sortObject[objectName[w]].iNumber);
}
//交换排序
for(i=0;i<SORT_OBJECT_NUM;i++)
{
for(int j=i+1;j<SORT_OBJECT_NUM;j++)
{
if(sortObject[objectName[j]].iNumber < sortObject[objectName[i]].iNumber)
{
//交换序号
int iTemp;
iTemp = sortObject[objectName[j]].iSeq;
sortObject[objectName[j]].iSeq = sortObject[objectName[i]].iSeq;
sortObject[objectName[i]].iSeq = iTemp;
//交换对象名
iTemp = objectName[j];
objectName[j] = objectName[i];
objectName[i] = iTemp;
//显示变化
CString strName;
CString strNum;
//显示j位置的对象
strName.Format("%d",sortObject[objectName[j]].iName);
dc.TextOut(objectCoord[sortObject[objectName[j]].iSeq].x-5,
objectCoord[sortObject[objectName[j]].iSeq].y-8,
strName);
if(sortObject[objectName[j]].iNumber<1000)
{
strNum.Format(" %d",sortObject[objectName[j]].iNumber);
}
else
{
strNum.Format("%d",sortObject[objectName[j]].iNumber);
}
dc.TextOut(objectCoord[sortObject[objectName[j]].iSeq].x-15,
objectCoord[sortObject[objectName[j]].iSeq].y-30,
strNum);
//显示i位置的对象
strName.Format("%d",sortObject[objectName[i]].iName);
dc.TextOut(objectCoord[sortObject[objectName[i]].iSeq].x-5,
objectCoord[sortObject[objectName[i]].iSeq].y-8,
strName);
if(sortObject[objectName[i]].iNumber<1000)
{
strNum.Format(" %d",sortObject[objectName[i]].iNumber);
}
else
{
strNum.Format("%d",sortObject[objectName[i]].iNumber);
}
dc.TextOut(objectCoord[sortObject[objectName[i]].iSeq].x-15,
objectCoord[sortObject[objectName[i]].iSeq].y-30,
strNum);
TRACE("\n");
for(int w=0;w<SORT_OBJECT_NUM;w++)
{
TRACE("%d ",sortObject[objectName[w]].iNumber);
}
//延迟1S进行下一轮排序以便于动画显示
Sleep(1000);
}
}
}
}
void CSortDlg::OnSelectionSort()
{
CClientDC dc (this) ;
dc.SetBkColor(RGB(100,100,255));
dc.FillRect(&CRect(0,0,250,150),&CBrush(RGB(100,100,255)));
int objectName[SORT_OBJECT_NUM]; //每个位置对应的待排序对象名
//初始化每个位置对应的待排序对象名
for(int i=0;i<SORT_OBJECT_NUM;i++)
{
objectName[i] = i;
}
TRACE("\n");
for(int w=0;w<SORT_OBJECT_NUM;w++)
{
TRACE("%d ",sortObject[objectName[w]].iNumber);
}
//选择排序
for(i=0;i<SORT_OBJECT_NUM;i++)
{
int iPos;
iPos = i;
for(int j=i+1;j<SORT_OBJECT_NUM;j++)
{
if(sortObject[objectName[j]].iNumber < sortObject[objectName[iPos]].iNumber)
{
iPos = j;
}
}
if(iPos!=i)
{
//交换序号
int iTemp;
iTemp = sortObject[objectName[iPos]].iSeq;
sortObject[objectName[iPos]].iSeq = sortObject[objectName[i]].iSeq;
sortObject[objectName[i]].iSeq = iTemp;
//交换对象名
iTemp = objectName[iPos];
objectName[iPos] = objectName[i];
objectName[i] = iTemp;
//显示变化
CString strName;
CString strNum;
//显示iPos位置的对象
strName.Format("%d",sortObject[objectName[iPos]].iName);
dc.TextOut(objectCoord[sortObject[objectName[iPos]].iSeq].x-5,
objectCoord[sortObject[objectName[iPos]].iSeq].y-8,
strName);
if(sortObject[objectName[iPos]].iNumber<1000)
{
strNum.Format(" %d",sortObject[objectName[iPos]].iNumber);
}
else
{
strNum.Format("%d",sortObject[objectName[iPos]].iNumber);
}
dc.TextOut(objectCoord[sortObject[objectName[iPos]].iSeq].x-15,
objectCoord[sortObject[objectName[iPos]].iSeq].y-30,
strNum);
//显示i位置的对象
strName.Format("%d",sortObject[objectName[i]].iName);
dc.TextOut(objectCoord[sortObject[objectName[i]].iSeq].x-5,
objectCoord[sortObject[objectName[i]].iSeq].y-8,
strName);
if(sortObject[objectName[i]].iNumber<1000)
{
strNum.Format(" %d",sortObject[objectName[i]].iNumber);
}
else
{
strNum.Format("%d",sortObject[objectName[i]].iNumber);
}
dc.TextOut(objectCoord[sortObject[objectName[i]].iSeq].x-15,
objectCoord[sortObject[objectName[i]].iSeq].y-30,
strNum);
TRACE("\n");
for(int w=0;w<SORT_OBJECT_NUM;w++)
{
TRACE("%d ",sortObject[objectName[w]].iNumber);
}
//延迟1S进行下一轮排序以便于动画显示
Sleep(1000);
}
}
}
void CSortDlg::OnInsertSort()
{
CClientDC dc(this) ;
dc.SetBkColor(RGB(100,100,255));
dc.FillRect(&CRect(0,0,250,150),&CBrush(RGB(100,100,255)));
int objectName[SORT_OBJECT_NUM]; ////每个位置对应的成员名
//初始化每个位置对应的成员
for(int i=0;i<SORT_OBJECT_NUM;i++)
{
objectName[i] = i;
}
TRACE("\n");
for(int w=0;w<SORT_OBJECT_NUM;w++)
{
TRACE("%d ",sortObject[objectName[w]].iNumber);
}
//插入排序
for(i=1;i<SORT_OBJECT_NUM;i++)
{
int iPos = i-1;
int iName = objectName[i];
CString strName,strNum;
while(iPos>=0 && sortObject[iName].iNumber < sortObject[objectName[iPos]].iNumber)
{
objectName[iPos+1] = objectName[iPos];
sortObject[objectName[iPos]].iSeq += 1;
//显示iPos+1位置的对象
strName.Format("%d",objectName[iPos+1]);
dc.TextOut(objectCoord[iPos+1].x-5,
objectCoord[iPos+1].y-8,
strName);
if(sortObject[objectName[iPos+1]].iNumber<1000)
{
strNum.Format(" %d",sortObject[objectName[iPos+1]].iNumber);
}
else
{
strNum.Format("%d",sortObject[objectName[iPos+1]].iNumber);
}
dc.TextOut(objectCoord[iPos+1].x-15,
objectCoord[iPos+1].y-30,
strNum);
iPos--;
Sleep(1000);
}
objectName[iPos+1] = iName;
sortObject[objectName[iPos+1]].iSeq = iPos+1;
//显示iPos+1位置的对象
strName.Format("%d",objectName[iPos+1]);
dc.TextOut(objectCoord[iPos+1].x-5,
objectCoord[iPos+1].y-8,
strName);
if(sortObject[objectName[iPos+1]].iNumber<1000)
{
strNum.Format(" %d",sortObject[objectName[iPos+1]].iNumber);
}
else
{
strNum.Format("%d",sortObject[objectName[iPos+1]].iNumber);
}
dc.TextOut(objectCoord[iPos+1].x-15,
objectCoord[iPos+1].y-30,
strNum);
TRACE("\n");
for(int w=0;w<SORT_OBJECT_NUM;w++)
{
TRACE("%d ",sortObject[objectName[w]].iNumber);
}
Sleep(1000);
}
}
void QuickSort(int objectName[], CDC &dc, int left, int right)
{
int i, j;
int middle, iTemp;
i = left;
j = right;
middle = sortObject[objectName[(left+right)/2]].iNumber; //求中间值
do
{
while ((sortObject[objectName[i]].iNumber < middle) && (i < right)) //从左扫描大于中值的数
i++;
while ((sortObject[objectName[j]].iNumber > middle) && (j > left)) //从右扫描小于中值的数
j--;
if (i < j) //找到了一对值
{
//交换成员名
iTemp = objectName[i];
objectName[i] = objectName[j];
objectName[j] = iTemp;
//交换序号
iTemp = sortObject[objectName[i]].iSeq;
sortObject[objectName[i]].iSeq = sortObject[objectName[j]].iSeq;
sortObject[objectName[j]].iSeq = iTemp;
//显示变化
CString strName;
CString strNum;
//显示j位置的对象
strName.Format("%d",objectName[j]);
dc.TextOut(objectCoord[j].x-5,
objectCoord[j].y-8,
strName);
if(sortObject[objectName[j]].iNumber<1000)
{
strNum.Format(" %d",sortObject[objectName[j]].iNumber);
}
else
{
strNum.Format("%d",sortObject[objectName[j]].iNumber);
}
dc.TextOut(objectCoord[j].x-15,
objectCoord[j].y-30,
strNum);
//显示i位置的对象
strName.Format("%d",objectName[i]);
dc.TextOut(objectCoord[i].x-5,
objectCoord[i].y-8,
strName);
if(sortObject[objectName[i]].iNumber<1000)
{
strNum.Format(" %d",sortObject[objectName[i]].iNumber);
}
else
{
strNum.Format("%d",sortObject[objectName[i]].iNumber);
}
dc.TextOut(objectCoord[i].x-15,
objectCoord[i].y-30,
strNum);
TRACE("\n");
for(int w=0;w<SORT_OBJECT_NUM;w++)
{
TRACE("%d ",sortObject[objectName[w]].iNumber);
}
//延迟1S进行下一轮排序以便于动画显示
Sleep(1000);
i++;
j--;
}
else if (i==j)
{
i++;
j--;
}
} while (i <= j) ; //如果两边扫描的下标交错,就停止(完成一次)
//当左边部分有值(left<j),递归左半边
if(left<j)
QuickSort (objectName,dc,left,j);
//当右边部分有值(right>i),递归右半边
if(right>i)
QuickSort (objectName,dc,i,right);
}
void CSortDlg::OnQuickSort()
{
CClientDC dc(this) ;
dc.SetBkColor(RGB(100,100,255));
dc.FillRect(&CRect(0,0,250,150),&CBrush(RGB(100,100,255)));
int objectName[SORT_OBJECT_NUM]; ////每个位置对应的成员名
//初始化每个位置对应的成员
for(int i=0;i<SORT_OBJECT_NUM;i++)
{
objectName[i] = i;
}
QuickSort(objectName,dc,0,SORT_OBJECT_NUM-1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -