📄 source.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 + -