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

📄 main.cpp

📁 利用多线程并行执行三种排序算法(冒泡排序、快速排序、归并排序)
💻 CPP
字号:
/* 
exp4_2 main.cpp : 定义控制台应用程序的入口点。

利用多线程并行执行三种排序算法(冒泡排序、快速排序、归并排序),并比较三种排序算法的执行速度

uuhorse

2008 年 5月 5日

*/


#include "sort.h"

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>


SqList num[4];	//分别存储原数据,冒泡排序,快速排序,归并排序
int t=0,kind[3]={0};	//kind[3]依次存储冒泡排序,快速排序,归并排序完成顺序;


DWORD WINAPI ThreadFunc1(LPVOID n);	//冒泡排序
DWORD WINAPI ThreadFunc2(LPVOID n);	//快速排序
DWORD WINAPI ThreadFunc3(LPVOID n);	//归并排序

int main( )
{
	CreatList( num );


	HANDLE hTread1;
	HANDLE hTread2;
	HANDLE hTread3;
	DWORD threadId1;
	DWORD threadId2;
	DWORD threadId3;

	hTread1=CreateThread(NULL,0,ThreadFunc1,NULL,0,&threadId1);//创建线程1
	hTread2=CreateThread(NULL,0,ThreadFunc2,NULL,0,&threadId2);//创建线程2
	hTread3=CreateThread(NULL,0,ThreadFunc3,NULL,0,&threadId3);//创建线程3
/*
	printf("创建了线程1,线程Id为%d\n",threadId1);
	printf("创建了线程2,线程Id为%d\n",threadId2);
	printf("创建了线程3,线程Id为%d\n",threadId3);*/


	DWORD exitcode1=STILL_ACTIVE ;
	DWORD exitcode2=STILL_ACTIVE ;
	DWORD exitcode3=STILL_ACTIVE ;
	while( exitcode1==STILL_ACTIVE || exitcode2==STILL_ACTIVE || exitcode3==STILL_ACTIVE )
	{
		GetExitCodeThread(hTread1,&exitcode1);
		GetExitCodeThread(hTread2,&exitcode2);
		GetExitCodeThread(hTread3,&exitcode3);
	}


	printf("\n\n冒泡排序:\n");
	for (int k=0;k<num[1].ListSize;k++)
	{
		printf(" %6d ",num[1].elem[k]);
		if ( k%10==9)	//每行输出10个
			printf("\n");
	}

	printf("\n\n快速排序:\n");
	for (k=0;k<num[2].ListSize;k++)
	{
		printf(" %6d ",num[2].elem[k]);
		if ( k%10==9)	//每行输出10个
			printf("\n");
	}

	printf("\n\n归并排序:\n");
	for (k=0;k<num[3].ListSize;k++)
	{
		printf(" %6d ",num[3].elem[k]);
		if ( k%10==9)	//每行输出10个
			printf("\n");
	}
	printf("\n\n冒泡排序第 %d\n",kind[0]);
	printf("快速排序第 %d\n",kind[1]);
	printf("归并排序第 %d\n",kind[2]);

	getchar();
	getchar();
	return 0;

}

/************************************************************************/

/* 线程1负责 冒泡排序
/************************************************************************/

DWORD WINAPI ThreadFunc1(LPVOID n)
{
	BubbleSort (num[1].elem, num[1].ListSize);

	t++;	kind[0]=t;
	printf("冒泡排序 结束\n");
	return 0;
}

/************************************************************************/

/* 线程2负责 快速排序                                                                    */
/************************************************************************/

DWORD WINAPI ThreadFunc2(LPVOID n)
{
	QuickSort(num[2].elem,0,num[2].ListSize-1);

	t++;	kind[1]=t;
	printf("快速排序 结束\n");
	return 0;
}

/************************************************************************/

/* 线程3负责 归并排序                                                                     */
/************************************************************************/

DWORD WINAPI ThreadFunc3(LPVOID n)
{
	MergeSortDC (num[3].elem, 0, num[3].ListSize-1);

	t++;	kind[2]=t;
	printf("归并排序 结束\n");
	return 0;
}

/************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -