⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 progress.cpp

📁 VC++实现的大规模数据的快速排序 VC++实现的大规模数据的快速排序
💻 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 + -