#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#include<ctime>
using namespace std;
void maopao(int B[],int n);
void charu(int B[],int n);
void xuanzhe(int B[],int n);
void xier(int B[],int n);
void guibing(int B[],int n);
void inguibing(int B[],int left,int right);
void inkuaishu(int B[],int left,int right);
int inkuaishu1(int B[],int left,int right);
void kuaishu(int B[],int n);
void jishu(int B[],int n);
int main(void)
{
int A[10];
srand(unsigned(time(NULL)));
for(int i=0;i<10;i++)
{
A[i]=rand()%100;
cout<<A[i]<<" ";
}
cout<<endl;
//冒泡排序
cout<<"冒泡排序"<<":";
maopao(A,10);
cout<<endl;
//插入排序
cout<<"插入排序"<<":";
charu(A,10);
cout<<endl;
//选择排序
cout<<"选择排序"<<":";
xuanzhe(A,10);
cout<<endl;
//希尔排序
cout<<"希尔排序"<<":";
xier(A,10);
cout<<endl;
//归并排序
cout<<"归并排序"<<":";
guibing(A,10);
cout<<endl;
//快速排序
cout<<"快速排序"<<":";
kuaishu(A,10);
cout<<endl;
//基数排序
cout<<"基数排序"<<":";
jishu(A,10);
cout<<endl;
for(int i=0;i<10;i++)
{
cout<<A[i]<<" ";
}
return 0;
}
void maopao(int B[],int n)
{
bool flag=true;
for(int i=1;flag;i++)
{
flag=false;
for(int j=n-1;j>=i;j--)
{
if(B[j]<B[j-1])
{
swap(B[j],B[j-1]);
flag=true;
}
}
}
for(int i=0;i<n;i++)
{
cout<<B[i]<<" ";
}
}
void charu(int B[],int n)
{
for(int i=1;i<n;i++)
{
int temp=B[i];
int j=i;
while(B[j]<B[j-1]&&j-1>=0)
{
B[j]=B[j-1];
j--;
}
B[j]=temp;
}
for(int i=0;i<n;i++)
{
cout<<B[i]<<" ";
}
}
void xuanzhe(int B[],int n)
{
for(int i=0;i<n;i++)
{
int minnum=INT_MAX;
int step=-1;
for(int j=i;j<n;j++)
{
if(B[j]<minnum)
{
minnum=B[j];
step=j;
}
}
swap(B[i],B[step]);
}
for(int i=0;i<n;i++)
{
cout<<B[i]<<" ";
}
}
void xier(int B[],int n)
{
int C[10];
int m=0;
int step=1;
while(step<n)
{
C[m]=step;
step=step*3+1;
m++;
}
for(int i=m-1;i>=0;i--)
{
for(int j=C[i]-1;j<n;j+=C[i])
{
int temp=B[j+C[i]];
while(B[j]>B[j+C[i]]&&j+C[i]<n)
{
B[j+C[i]]=B[j];
j-=C[i];
}
B[j+C[i]]=temp;
}
}
for(int i=0;i<n;i++)
{
cout<<B[i]<<" ";
}
}
void guibing(int B[],int n)
{
int A[100];
for(int i=0;i<n;i++)
{
A[i]=B[i];
}
inguibing(A,0,n-1);
for(int i=0;i<n;i++)
{
cout<<A[i]<<" ";
}
}
void inguibing(int B[],int left,int right)
{
if(left<right)
{
int mid=(left+right)/2;
inguibing(B,left,mid);
inguibing(B,mid+1,right);
int C[100];
int step=0;
int i=left,j=mid+1;
while(i<=mid&&j<=right)
{
if(B[i]<=B[j])
{
C[step]=B[i];
i++;
}
else
{
C[step]=B[j];
j++;
}
step++;
}
while(i<=mid)
{
C[step]=B[i];
i++;
step++;
}
while(j<=right)
{
C[step]=B[j];
j++;
step++;
}
for(int i=0;i<step;i++)
{
B[left+i]=C[i];
}
}
}
void kuaishu(int B[],int n)
{
inkuaishu(B,0,n-1);
for(int i=0;i<n;i++)
{
cout<<B[i]<<" ";
}
}
void inkuaishu(int B[],int left,int right)
{
if(left<right)
{
int lr=inkuaishu1(B,left,right);
inkuaishu(B,left,lr-1);
inkuaishu(B,lr+1,right);
}
}
int inkuaishu1(int B[],int left,int right)
{
int j=left-1;//指向 <=B[right]
int temp=B[right];//以right为基点
for(int i=left;i<right;i++)
{
if(B[i]<temp)
{
j++;
swap(B[i],B[j]);
}
}
j++;
swap(B[j],B[right]);
return j;
}
void jishu(int B[],int n)
{
int A[101];
int C[101];
memset(A,0,sizeof(A));
for(int i=0;i<n;i++)
{
A[B[i]]++;
}
for(int i=0;i<100;i++)
{
A[i+1]+=A[i];//位置
}
for(int i=0;i<n;i++)
{
C[A[B[i]]]=B[i];
cout<<A[B[i]]<<" ";//以1开头
A[B[i]]--;
}
cout<<endl;
for(int i=1;i<=n;i++)
{
cout<<C[i]<<" ";
}
}
基本排序
最新推荐文章于 2021-01-14 13:05:07 发布