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

📄 source.h

📁 用VC+ASM做的内排序比较软件
💻 H
字号:
#include <stdio.h>
#include <time.h>
#include <windows.h>

//堆排序,只能从1开始排起
#define type int
void sift(type *r,int s,int m)
{
	int j;
	int temp=r[s];
	for(j=2*s;j<=m;j*=2)
	{
		//关键步骤,生成大顶堆
		if(j<m&&r[j]<r[j+1]) ++j;
		if(temp>r[j]) break;
		else r[s]=r[j];s=j;
	}
	r[s]=temp;
}
void HeapSort(type *r,int n)
{
	int i,temp;
	for(i=n/2;i>0;--i)
		sift(r,i,n);
	for(i=n;i>1;--i)
	{
		temp=r[1];
		r[1]=r[i];
		r[i]=temp;
		sift(r,1,i-1);		
	}
}

/*快速排序*/
//一趟快排
int Partition(type r[],int low,int high)
{
	r[0]=r[low];
	while(low<high)
	{
		while(low<high&&r[high]>=r[0]) --high;
		r[low]=r[high];
		while(low<high&&r[low]<=r[0]) ++low;
		r[high]=r[low];
	}
	r[low]=r[0];
	return low;
}
//递归排序
void Qsort(type r[],int low,int high)
{
	int locate;
	if(low<high)
	{
		locate=Partition(r,low,high);
		Qsort(r,low,locate-1);
		Qsort(r,locate+1,high);
	}
}
//主排序
void QuickSort(type r[],int n)
{
	Qsort(r,1,n);
}

/*选择排序*/
//返回第low小的数的地址
int SelectMin(int r[],int low,int n)
{
   int i;
   int min=r[low];
	for(i=low;i<n;i++)
	{
		if(r[i]<r[low]) 
		{
			min=r[i];
			//the locate is set when min is change
			low=i;
		}
	}
	return low;
}
//做简单的选择排序
void SelectSort(type r[],int n)
{
	int i,j,temp;
	for(i=1;i<n;i++)
	{
		//control the Select times
	   j=SelectMin(r,i,n);
		if(i!=j)
		{
			temp=r[i];
			r[i]=r[j];
			r[j]=temp;
		}
	}
}

//InsertSort(type r[],int n)
void InsertSort(type r[],int n)
{
	int i,j;
	for(i=2;i<n;++i)
	{
		if(r[i]<r[i-1])
		{
			r[0]=r[i];
			r[i]=r[i-1];
			r[i-1]=r[0];
			for(j=i-2;r[0]<r[j];--j)
			{
				r[j+1]=r[j];
				r[j]=r[0];
			}
		}		
	}
}

//Exchange method
void ExchangeSort(int r[],int Count)
{
    int iTemp,j,i;
    for(i=1;i<Count;i++)
    {
        for(j=i+1;j<Count;j++)
        {
            if(r[j]<r[i])
            {
                iTemp = r[i];
                r[i] = r[j];
                r[j] = iTemp;
            }
        }
    }
}

//bubblesort
void bubble(int r[],int count)
{
    
	int m,n,d;
	for(m=1;m<count;m++)
		for(n=count-1;n>=m;--n)
		{
			if(r[n-1]>r[n])
			{
				d=r[n-1];
				r[n-1]=r[n];
				r[n]=d;
			}
		}
}

//MergeSort
void Merge(type r[],int low,int mid,int high)
{
	type *r1;
	int i=low,j=mid+1,k=0;
	r1=(type *)malloc((high-low+1)*sizeof(type));
	while(i<=mid&&j<=high)
	{
		if(r[i]<r[j])
		{
			r1[k]=r[i];i++;k++;
		}
		else
		{
			r1[k]=r[j];j++;k++;
		}
	}
	while(i<=mid)
	{
		r1[k]=r[i];
		i++;k++;
	}
	while(j<=high)
	{
		r1[k]=r[j];
		j++;k++;
	}
	for(k=0,i=low;i<=high;k++,i++)
		r[i]=r1[k];
}
void MergePass(type r[],int length,int n)
{
	int i;
	for(i=0;(i+2*length-1)<n;i=i+2*length)
	{
		Merge(r,i,i+length-1,i+2*length-1);
	}
	if(i+length-1<n)
		Merge(r,i,i+length-1,n-1);
}
void MergeSort(type r[],int n)
{
	int length;
	for(length=1;length<n;length=2*length)
		MergePass(r,length,n);
}

//input
int Input(type r[])
{
	FILE *fp;
	int i=1;
	fp=fopen("InputData.txt","r");
	 while(!feof(fp))
	 {
		 fscanf(fp,"%d",&r[i]); 
		 i++;
	 }
	 return i;
}

//ouput
void ouput(type r[],int n)
{
	int i;
	FILE *fp;
	fp=fopen("OuputData.txt","w");
	for(i=1;i<=n-1;i++)
	{
		if(i%30==0) fprintf(fp,"%d\n",r[i]);
		else fprintf(fp,"%d ",r[i]);
	}

}

⌨️ 快捷键说明

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