?? 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 + -