常用排序算法

本文介绍了几种常见的排序算法,如插入排序、希尔排序、起泡排序、快速排序、选择排序和堆排序,并分析了它们在排序过程中的稳定性特性。
摘要由CSDN通过智能技术生成
//直接插入排序 稳定 
void insert(int r[],int n)
{
	for(int i=2;i<=n;i++)
	{
		r[0]=r[i];
		int j=i-1;
		while(r[0]<r[j])
		{
			r[j+1]=r[j];
			j--;
		}
		r[j+1]=r[0];
	}
}
//希尔排序 不稳定 
void shellsort(int r[],int n)
{
	for(int d=n/2;d>=1;d=d/2)
	{
		for(int i=d+1;i<=n;i++)
		{
			r[0]=r[i];
			int j=i-d;
			while(j>0&&r[0]<r[j])
			{
				r[j+d]=r[j];
				j=j-d;
			}
			r[j+d]=r[0];
		}
	}
}
//起泡排序 稳定 
void bublesort(int r[],int n)
{
	int j,exchange,bound,temp;
	exchange=n-1;
	while(exchange!=0)
	{
		bound=exchange;
		exchange=0;
		for(j=0;j<bound;j++)
		if(r[j]>r[j+1])
		{
			temp=r[j];
			r[j]=r[j+1];
			r[j+1]=temp;
			exchange=j;
		}
	}
 }
 //快速排序 不稳定  
 int partition(int r[],int first,int last)
 {
 	int i=first,j=last,temp;
 	while(i<j)
 	{
 		while(i<j&&r[i]<=r[j])j--;
 		if(i<j)
 		{
 			temp=r[i];
 			r[i]=r[j];
 			r[j]=temp;
 			i++;
		 }
		 while(i<j&&r[i]<=r[j])
		 i++;
		 if(i<j)
 		{
 			temp=r[i];
 			r[i]=r[j];
 			r[j]=temp;
 			j--;
		 }
	 }
	 return i;    
 }
 void quicksort(int r[],int first,int last)
 {
 	if(first>=last)return ;
 	else{
 	int pivot=partition(r,first,last);
 	quicksort(r,first,pivot-1);
 	quicksort(r,pivot+1,last);
	 }
 }
//选择排序 不稳定 
 void selectsort(int r[],int n)
 {
 	int i,j,index,temp;
 	for(i=0;i<n-1;i++)
 	{
 		index=i;
 		for(j=i+1;j<n;j++)
 		if(r[j]<r[index])
 		index=j;
 		if(index!=i)
 		{
 			temp=r[i];
 			r[i]=r[index];
 			r[index]=temp;
		 }
	 }
  } 
  //堆排序 不稳定 
  void sift(int r[],int k,int m)
  {
  	int i=k;
  	int j=2*i;
  	int temp=r[i];
  	while(j<=m)
  	{
  		if(j<m&&r[j]<r[j+1])j++;
  		if(r[i]>r[j])
  		break;
  		else{
  			int t=r[i];
  			r[i]=r[j];
  			r[j]=t;
  			i=j;
  			j=2*i;
		  }
	  }
   } 
   void heapsort(int r[],int n)
   {
   	for(int i=n/2;i>=1;i--)
   	sift(r,i,n);
   	for(int i=1;i<n;i++)
   	{
   		int temp=r[1];
   		r[1]=r[n-i+1];
   		r[n-i+1]=temp;
   		sift(r,1,n-i);
	   }
   }
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值