基本排序

#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]<<" ";
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值