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

📄 zheban.cpp

📁 排序算法
💻 CPP
字号:
// zheban.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "time.h"
#include "stdlib.h"
#define NUM 10000

void printArray(int arr[],int n);//声明打印函数
void RandomArray(int arr[],int n);//声明随机生成函数

void bubble(int arr[],int n);//声明冒泡函数
void select(int arr[],int n);//声明选择函数
void insert(int arr[],int n);//声明折半插入函数
void quick(int arr[],int startPos, int endPos) ;//声明快排函数
void MSort(int *,int *,int,int);//声明归并函数
void Merge(int SR[],int TR[], int i,int m, int n);

int main(int argc, char* argv[])//定义主函数
{

	int arr[NUM];
	int currenttime;
	int d;
	
	while(1)
	{
		printf("please press any key to get Random array:\n");
		getchar();
		RandomArray(arr,NUM);//调用随机函数
        printArray(arr,NUM);//调用打印函数
		printf("==========================================================================\n");
		printf("1----bubble\n\n2----select\n\n3----merge\n\n4----quick\n\n5----insert\n\n0----exit\n\n\nPress the number to sort the array!\n\n");
		scanf("%d",&d);
		currenttime=clock();//获取当前时间
		switch(d)
		{
		case 1:
			bubble(arr,NUM);
			break;
		case 2:
			select(arr,NUM);
			break;
		case 3:
			MSort(arr,arr,0,NUM-1);
			break;
		case 4:
			quick(arr,0,NUM);
			break;
		case 5:
			insert(arr,NUM);
			break;
		}	
		currenttime=clock()-currenttime;//计算运行时间
		if(d==0)
			break;	
		printArray(arr,NUM);
		printf("\n\n\nThe use time of this kink of sort is:%d毫秒\n\n\n",currenttime);
		printf("Please input anykey to go on!");
		getchar();
		getchar();		
		printf("\n\n\n\n\n");
	}
	return 0;
}

void RandomArray(int arr[],int n)//定义产生随机数函数
{
	srand((unsigned)time(NULL));
	for(int i=0;i<n;i++)
	{		 
		arr[i]=rand();
	}
}

void printArray(int arr[],int n)//定义打印函数
{

	for(int i=0;i<n;i++)
	{
		printf("%7d",arr[i]);
		if((i+1)%10==0)
		{
			printf("\n");
		}
	}
}

void bubble(int arr[],int n)//定义冒泡排序
{
	int i,j,t;
	for(j=0;j<n-1;j++)
		for(i=0;i<n-j-1;i++) 
			if(arr[i]>arr[i+1]) 
			{t=arr[i];arr[i]=arr[i+1];arr[i+1]=t;}
}

void select(int a[],int n)//定义选择排序
{
	int k,j;
	for(int i=0;i<n-1;i++)
	{
		k=i;
		for (j=i+1;j<n;j++)
			if(a[j]<a[k])
			{
				int temp=a[k];
				a[k]=a[j];
				a[j]=temp;
			}
	}
}



void insert(int arr[],int n)//定义折半排序 
{
	int temp;
	int low,high,mid;
	for (int i=1; i<n; ++i )
	{
		temp = arr[i];
		low = 0; high = i-1;
		while (low<=high) 
		{
			mid = (low+high)/2;
			if (temp < arr[mid])
				high = mid-1;
			else low = mid+1;
		}
		for (int j=i-1; j>=high+1; --j )
			arr[j+1] = arr[j];
		arr[high+1] = temp;
	}
}

void quick(int arr[],int startPos, int endPos) //定义快排排序
{
	int i,j;
	int temp; 
	temp=arr[startPos]; 
	i=startPos; 
	j=endPos; 
	while(i<j) 
	{ 
		while(arr[j]>=temp && i<j)--j; 
		arr[i]=arr[j]; 
		while(arr[i]<=temp && i<j)++i; 
		arr[j]=arr[i]; 
	} 
	arr[i]=temp; 
	if(i-1>startPos) quick(arr,startPos,i-1); 
	if(endPos>i+1) quick(arr,i+1,endPos); 
}

void MSort(int SR[],int TR1[], int s, int t)//定义归并函数
{
int TR2[NUM];
int m;
if(s==t) 
TR1[s] = SR[s];
else
{
m=(s+t)/2;
MSort(SR,TR2,s,m);
MSort(SR,TR2,m+1,t);
Merge(TR2, TR1,s,m,t);
}
}

void Merge(int SR[],int TR[], int i,int m, int n)
{
int j,k,l;
for(j=m+1,k=i; i<=m&&j<=n; ++k)
{
if( SR[i]<SR[j] )
TR[k] = SR[i++];
else
TR[k] = SR[j++];
}

l=k;
if(i<=m)
for(;k<=n&&i<=m;k++)
TR[k] = SR[i++];
k=l;
if(j<=n)
for(;k<=n&&j<=n;k++)
TR[k] = SR[j++];
}

⌨️ 快捷键说明

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