📄 progress.cpp
字号:
// Progress.cpp : 实现文件
//
#include "stdafx.h"
#include "Sort.h"
#include "Progress.h"
#include ".\progress.h"
#define T 6250
#define M 12500
// Progress 对话框
IMPLEMENT_DYNAMIC(Progress, CDialog)
Progress::Progress(CWnd* pParent /*=NULL*/)
: CDialog(Progress::IDD, pParent)
, m_finish(_T(""))
{
}
Progress::~Progress()
{
}
void Progress::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_finish);
}
BEGIN_MESSAGE_MAP(Progress, CDialog)
// ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON3, OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
END_MESSAGE_MAP()
// Progress 消息处理程序
int flag=0;
FILE *out;
LinkList L[2000];
long n[2000];
BOOL Progress::OnInitDialog()
{
CDialog::OnInitDialog();
flag=0;int i;
COleDateTime dt1= COleDateTime::GetCurrentTime();
CString starttime=dt1.Format();
if((out=fopen(OutFName,"w"))==NULL){//
AfxMessageBox("无法创建存放排序后数据的文件!");return true;}
if(InFName=="ff2.dat"){ //排ff2用121条链表
for(i=1;i<=961;i++)
{ L[i]=(LinkList)malloc(sizeof(LNode));
L[i]->next=NULL;//带头结点
n[i]=0;
}
CreatLinkList(L,InFName,n);//L为链表数组名
if(flag==0)
{for(i=1;i<=961;i++)
SelectSort(L[i],n[i]);
fclose(out);}
else
{fclose(out);return TRUE;}
}//ff2
if(InFName=="ff1.dat"){ //排ff1用101条链表
for(i=1;i<=1601;i++)
{ L[i]=(LinkList)malloc(sizeof(LNode));
L[i]->next=NULL;//带头结点
n[i]=0;}
CreatLinkList(L,InFName,n);//L为链表数组名
if(flag==0)
{for(i=1;i<=1601;i++)
SelectSort(L[i],n[i]);
fclose(out);}
else {fclose(out);return TRUE;}
}//ff1
COleDateTime dt2= COleDateTime::GetCurrentTime();
CString endtime=dt2.Format();
COleDateTime dt3=dt2-dt1;
CString s=dt3.Format();
m_finish="文件已排序完毕! 在您的电脑上的运行时间"+s;
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void Progress::CreatLinkList(LinkList List[], CString FName,long N[])
{FILE *fp;long num;int i=0;int n;
if((fp=fopen(FName,"r"))==NULL){AfxMessageBox("找不到要排序的文件!请确定文件在当前目录下后重试");flag=1; fclose(out);
return;}
if(FName=="ff2.dat")
{
fscanf(fp,"%d",&num);
for(n=1;n<=961;n++)
if(num>((n-1)*T)&& num<=n*T)
{ListInsert(List[n],num);N[n]++;}
while(!feof(fp)){
fseek(fp,1L,1);
fscanf(fp,"%d",&num);
for(n=1;n<=961;n++)
if(num>((n-1)*T)&& num<=n*T)
{ListInsert(List[n],num);N[n]++;}
}
fclose(fp);
}//ff2
if(FName=="ff1.dat")
{ fscanf(fp,"%d",&num);
for(n=1;n<=1601;n++)
if(num>((n-1)*M)&& num<=n*M)
{ListInsert(List[n],num);N[n]++;}
while(!feof(fp)){
fseek(fp,1L,1);
fscanf(fp,"%d",&num);
for(n=1;n<=1601;n++)
if(num>((n-1)*M)&& num<=n*M)
{ListInsert(List[n],num);N[n]++;}
}
fclose(fp);
}//ff1
}
void Progress::ListInsert(LinkList &L,long elem){
LinkList p;
p=(LinkList)malloc(sizeof(LNode));
p->next=L->next;L->next=p;
p->data=elem;
}
void Progress::SelectSort(LinkList &L,long n){
LinkList p,q,min;long num;
q=L->next;min=q;//min和q都指向第一个数据
CString str;
for(int i=1;i<=n-1;i++){
p=q->next;//p指向未排数据的第二个数据
while(p!=NULL){
if(p->data<min->data) min=p;//在未排序数据中选出最小的
p=p->next;}//while
num=q->data;q->data=min->data;min->data=num;//交换第i次找到的最小数据和第i个数据
fprintf(out,"%ld",q->data);
fputc(',',out);
q=q->next;min=q;
}//for
fprintf(out,"%ld",q->data);
}
void Progress::OnBnClickedButton3(){
EndDialog(0);
}
void Progress::OnBnClickedButton1(){
ShellExecute(NULL, "open", OutFName, NULL, NULL, SW_SHOWNORMAL);
EndDialog(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -