#include<iostream>
using namespace std;
void SelectSort(int r[],int n);//选择排序
void InsertSort(int r[],int n);//直接插入排序
void BinInsertSort(int r[],int n);//折半插入排序
void ShellSort(int r[],int n);//希尔排序
void Partition(int r[],int i,int j);//快速排序
void Sift(int r[],int k,int m);
void HeapSort(int r[],int n);//堆排序
void Merge(int r[],int r1[],int s,int m,int t);
void MergePass(int r[],int r1[],int n,int h);
void MergeSort(int r[],int n);//归并排序
int main()
{
int a[11]={0,1,5,2,99,5,7,4,90,65,3};
int i;
MergeSort(a,10);
for(i=1;i<11;i++)
cout<<a[i]<<" ";
return 0;
}
void Merge(int r[],int r1[],int s,int m,int t)
{
int i=s,j=m+1,k=s;
while(i<=m&&j<=t)
{
if(r[i]<r[j])
r1[k++]=r[i++];
else
r1[k++]=r[j++];
}
while(i<=m)
r1[k++]=r[i++];
while(j<=t)
r1[k++]=r[j++];
}
void MergePass(int r[],int r1[],int n,int h)
{
int i=1;
while(i<=n-2*h+1)
{
Merge(r,r1,i,i+h-1,i+2*h-1);
i=i+2*h;
}
if(i<=n-h)
{
Merge(r,r1,i,i+h-1,n);
}
else
{
while(i<=n)
{
r1[i]=r[i];
i++;
}
}
}
void MergeSort(int r[],int n)
{
int *r1=new int[n+1];
int h=1;
while(h<n)
{
MergePass(r,r1,n,h);
h=2*h;
MergePass(r1,r,n,h);
h=2*h;
}
}
void Sift(int r[],int k,int m)
{
int i=k,j=2*i;
while(j<=m)
{
if(j<m&&r[j+1]>r[j])
j++;
if(r[j]<r[i])
break;
else
{
int temp=r[j];
r[j]=r[i];
r[i]=temp;
i=j;
j=2*i;
}
}
}
void HeapSort(int r[],int n)
{
int i;
for(i=n/2;i>=1;i--)
Sift(r,i,n);
for(i=1;i<n;i++)
{
int temp=r[1];
r[1]=r[n+1-i];
r[n+1-i]=temp;
Sift(r,1,n-i);
}
}
void Partition(int r[],int i,int j)
{
if(i>=j)
return;
int a=i,b=j;
int temp=r[i];
while(i<j)
{
while(r[j]>=temp)
j--;
if(i<j)
r[i++]=r[j];
while(i<j&&r[i]<=temp)
i++;
if(i<j)
r[j--]=r[i];
}
r[i]=temp;
Partition(r,a,i-1);
Partition(r,i+1,b);
}
void ShellSort(int r[],int n)
{
int d=n/2;
int i,j;
int temp;
while(d>=1)
{
for(i=d;i<n;i++)
{
temp=r[i];
for(j=i-d;j>=0;j=j-d)
{
if(r[j]>temp)
r[j+d]=r[j];
else
break;
}
r[j+d]=temp;
}
d=d/2;
}
}
void BinInsertSort(int r[],int n)
{
int i,j,low,high;
for(i=1;i<n;i++)
{
low=0;
int temp=r[i];
high=i-1;
while(low<=high)
{
int mid=(low+high)/2;
if(r[mid]<r[i])
low=mid+1;
else
high=mid-1;
}
for(j=i-1;j>=low;j--)
{
r[j+1]=r[j];
}
r[low]=temp;
}
}
void InsertSort(int r[],int n)
{
int i;
for(i=1;i<n;i++)
{
int temp=r[i];
for(int j=i-1;j>=0;j--)
{
if(r[j]>temp)
r[j+1]=r[j];
else
break;
}
r[j+1]=temp;
}
}
void SelectSort(int r[],int n)
{
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(r[j]<r[k])
k=j;
}
if(k!=i)
{
int flag=r[k];
r[k]=r[i];
r[i]=flag;
}
}
}
各种排序算法
最新推荐文章于 2024-06-02 11:21:37 发布