7,785
社区成员




'解题思路
'设置二个指针,分别指向 数组A与数组B
'先设置A指针指向A的第N位。B指针指向B的第一位
'以下是循环部分
'如果A指针指向的数据大于B指针指向的数据。则直接返回A指针指向的数据。
'如果A指针指向的数据小于B指针指向的数据。则进行以下判断
'1.如果A指针指向的数据大于B指针指向的下一数据,则进行以下判断
'1.1 A指针指向的上一数据小于B指针指向的数据,则直接返回A指针上一指向的数据。
'1.2 A指针指向的上一数据大于B指针指向的数据,则直接返回B指针指向的数据。
'2.如果A指针指向的数据小于B指针指向的下一数据,则对指针进行移位。A指向上一位,B指向下一位
'因此,最差的情况下是,A指向循环至最第一位。循环N次。
'最好的情况下是:不会循环,第一次就成功/
'Arr_1 = Array(43, 42, 32, 18, 11, 9, 7, 0, -1)
'Arr_2 = Array(38, 37, 31, 15, 12, 5, -1)
'取第六位的示例:
'A指针指向数据 9 B指针指向数据 38
'9<38 进行判断 9<37
'A指向11 B指向 37
'11<37 进行判断 11<31
'A指向 18 B指向 31
'18<31 进行判断 18>15(子判断 33>31)返回31
'一共进行了二次循环
//看看C++的快速排序,非常快.我还是喜欢C的排序算法
////////////////////////生成10个随机数,显示在10个编辑框中//////////////
void CEeeDlg::OnButton2()
{
srand((unsigned)time(NULL));
for(int i=0;i<10;i++)
{
CString str;
str.Format("%d",rand());
GetDlgItem(IDC_EDIT16+i)->SetWindowText(str);
}
}
//////////////调用快速排序函数,对前10 个编辑框中的数字进行排序//////////////////
void CEeeDlg::OnSort()
{
int x[10];
for(int i=0;i<10;i++)
{
CString s;
GetDlgItem(IDC_EDIT16+i)->GetWindowText(s);
x[i+1]=atoi(s);
}
quick_sort(x,1,10);
for(i=0;i<10;i++)
{
CString str;
str.Format("%d",x[i+1]);
GetDlgItem(IDC_EDIT26+i)->SetWindowText(str);
}
}
/////////////////////////////////////快速排序函数的实现过程/////////////////
void CEeeDlg::quick_sort(int x[], int low, int high)
{
int i=low, j=high;
int t=x[low];
while (i<j)
{
while (i<j && x[j]>t)
j--;
x[i]=x[j];
while (i<j && x[i]<=t)
i++;
x[j]=x[i];
x[i] = t;
quick_sort(x,low,i-1); //递归调用此函数
quick_sort(x,i+1,high);
}
}
//////////////清空所有编辑框中的数字/////////////////////////////
void CEeeDlg::OnClear()
{
for(int i=0;i<10;i++)
{
GetDlgItem(IDC_EDIT16+i)->SetWindowText("");
GetDlgItem(IDC_EDIT16+i)->SetWindowText("");
}
}
void CEeeDlg::OnAbout()
{
CAboutDlg dlg;
dlg.DoModal();
}
///////////////////改变控件的颜色//////////////////////
HBRUSH CEeeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
for(int i=0; i<10;i++)
{
if(pWnd->GetDlgCtrlID()==IDC_EDIT16+i)
pDC->SetTextColor(RGB(0,0,255));
if(pWnd->GetDlgCtrlID()==IDC_EDIT26+i)
pDC->SetTextColor(RGB(0,128,128));
if(pWnd->GetDlgCtrlID()==IDC_TIME)
pDC->SetTextColor(RGB(0,0,255));
}
return hbr;
}
////////////////////显示时间///////////////////////////
void CEeeDlg::OnTimer(UINT nIDEvent)
{
GetDlgItem(IDC_TIME)->SetFont(&m_font);
CTime t=CTime::GetCurrentTime();
m_time=t.Format("%H:%M:%S");
UpdateData(false);
CDialog::OnTimer(nIDEvent);
}