9大排序

1、冒泡排序

#include <stdio.h>

void mySwap(int *a,int i,int j)
{
	int tmp=a[i];
	a[i]=a[j];
	a[j]=tmp;
}


void mySort1(int *a,int len)
{
	int i,j;
	
	for(i=0;i<len-1;i++)
	{
		for(j=0;j<len-1-i;j++)
		{
			if(a[j]>a[j+1])
			{
				mySwap(a,j,j+1);
			}
		}
	}
}

void mySort(int *a,int len)
{
	if(len==1)
		return;
	int j;
	
	for(j=0;j<len-1;j++)
	{
		if(a[j]>a[j+1])
		{
			mySwap(a,j,j+1);
		}
	}
	mySort(a,len-1);
	
}
void myPrint(int *a,int len)
{
	int i;
	
	for(i=0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
}

int main()
{
	int a[]={9,8,7,6,5,4,3,2,1,0};
	
	int len=sizeof(a)/sizeof(a[0]);
	mySort(a,len);
	myPrint(a,len);
	printf("\n");
}

2、鸡尾酒排序

#include <stdio.h>

void mySwap(int *a,int i,int j)
{
	int tmp=a[i];
	a[i]=a[j];
	a[j]=tmp;
}


void mySort1(int *a,int len)
{
	int left=0;
	int right=len-1;
	int j;
	while(left<right)
	{
		for(j=left;j<right;j++)
		{
			if(a[j]>a[j+1])
			{
				mySwap(a,j,j+1);
			}
		}
		right--;
		
		for(j=right;j>left;j--)
		{
			if(a[j]<a[j-1])
			{
				mySwap(a,j,j-1);
			}
		}
		left++;

	}
}

void mySort(int *a,int left,int right)
{
	if(left>=right)
		return;
	int j;
	
	for(j=left;j<right;j++)
	{
		if(a[j]>a[j+1])
		{
			mySwap(a,j,j+1);
		}
	}
	right--;
		
	for(j=right;j>left;j--)
	{
		if(a[j]<a[j-1])
		{
			mySwap(a,j,j-1);
		}
	}
	left++;
	
	mySort(a,left,right);

	
}


void myPrint(int *a,int len)
{
	int i;
	
	for(i=0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
}

int main()
{
	int a[]={9,8,7,6,5,4,3,2,1,0};
	
	int len=sizeof(a)/sizeof(a[0]);
	mySort(a,0,len-1);
	myPrint(a,len);
	printf("\n");
}

3、选择排序

#include <stdio.h>

void mySwap(int *a,int i,int j)
{
	int tmp=a[i];
	a[i]=a[j];
	a[j]=tmp;
}


void mySort(int *a,int len)
{
	int i,j;
	
	for(i=0;i<len-1;i++)
	{
		int min=i;//把
		for(j=i+1;j<len;j++)
		{
			if(a[min]>a[j])
			{
				min=j;
			}
		}
		if(a[i]!=a[min])
		{
			mySwap(a,i,min);
		}
	}
}



void myPrint(int *a,int len)
{
	int i;
	
	for(i=0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
}

int main()
{
	int a[]={9,8,7,6,5,4,3,2,1,0};
	
	int len=sizeof(a)/sizeof(a[0]);
	mySort(a,len);
	myPrint(a,len);
	printf("\n");
}

4、插入排序

#include <stdio.h>
void mySwap(int *a,int i,int j)
{
	int tmp=a[i];
	a[i]=a[j];
	a[j]=tmp;
}


void mySort(int *a,int len)
{
	int i,j,get;
	for(i=1;i<len;i++)
	{
		get=a[i];
		j=i-1;
		while(a[j]>get&&j>=0)
		{
			a[j+1]=a[j];
			j--;
		}
		a[j+1]=get;
	}
		
}



void myPrint(int *a,int len)
{
	int i;
	
	for(i=0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
}

int main()
{
	int a[]={9,8,7,6,5,4,3,2,1,0};
	
	int len=sizeof(a)/sizeof(a[0]);
	mySort(a,len);
	myPrint(a,len);
	printf("\n");
}

5、二分法插入排序

void mySwap(int *a,int i,int j)
{
	int tmp=a[i];
	a[i]=a[j];
	a[j]=tmp;
}


void mySort(int *a,int len)
{
	int i,j,get;
	for(i=1;i<len;i++)
	{
		get=a[i];
		int left=0;
		int right=i-1;
		while(left<=right)
		{
			int mid=(left+right)/2;
			if(a[mid]>get)
			{
				right=mid-1;
			}
			else
			{
				left=mid+1;
			}	
		}
		int j;
		for(j=i-1;j>=left;j--)
		{
			a[j+1]=a[j];
		}
		a[left]=get;
	}
		
}



void myPrint(int *a,int len)
{
	int i;
	
	for(i=0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
}

int main()
{
	int a[]={9,8,7,6,5,4,3,2,1,0};
	
	int len=sizeof(a)/sizeof(a[0]);
	mySort(a,len);
	myPrint(a,len);
	printf("\n");
}

6、希尔排序

#include <stdio.h>
void mySwap(int *a,int i,int j)
{
	int tmp=a[i];
	a[i]=a[j];
	a[j]=tmp;
}


void mySort(int *a,int len)
{
	int i,j,get,gap;
	while(gap<len)
	{
		gap=gap*3+1;
	}
	while(gap>0)
	{
		for(i=gap;i<len;i++)
		{
			get=a[i];
			j=i-gap;
			while(a[j]>get&&j>=0)
			{
				a[j+gap]=a[j];
				j-=gap;
			}
			a[j+gap]=get;
			
		}
		gap=gap/3;
	}
		
}



void myPrint(int *a,int len)
{
	int i;
	
	for(i=0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
}

int main()
{
	int a[]={9,8,7,6,5,4,3,2,1,0};
	
	int len=sizeof(a)/sizeof(a[0]);
	mySort(a,len);
	myPrint(a,len);
	printf("\n");
}

7、堆排序

#include <stdio.h>
void mySwap(int *a,int i,int j)
{
	int tmp=a[i];
	a[i]=a[j];
	a[j]=tmp;
}


void herify(int *a,int index,int len)
{
	int lindex=index*2+1;
	int rindex=index*2+2;
	int max=index;
	if(lindex<=len-1&&a[lindex]>a[max])
		max=lindex;
	
	if(rindex<=len-1&&a[rindex]>a[max])
	{
		max=rindex;
	}
	
	if(max!=index)
	{
		mySwap(a,index,max);
		herify(a,max,len);
	}

}

void mySort(int *a,int len)
{
	int i;
	
	for(i=len/2-1;i>=0;i--)
	{
		herify(a,i,len);
	}
	int count=len;
	for(i=len-1;i>0;i--)
	{
		mySwap(a,0,i);
		count--;
		herify(a,0,count);//或者不需要count,直接用i
	}
}
		



void myPrint(int *a,int len)
{
	int i;
	
	for(i=0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
}

int main()
{
	int a[]={9,8,7,6,5,4,3,2,1,0};
	
	int len=sizeof(a)/sizeof(a[0]);
	mySort(a,len);
	myPrint(a,len);
	printf("\n");
}

8、归并排序

#include <stdio.h>
void mySwap(int *a,int i,int j)
{
	int tmp=a[i];
	a[i]=a[j];
	a[j]=tmp;
}


void merge(int *a,int left,int mid,int right,int *tmp)
{
	int i=left;
	int j=mid+1;
	int k=0;
	while(i<=mid&&j<=right)
	{
		if(a[i]<a[j])
		{
			tmp[k++]=a[i++];
		}
		else
		{
			tmp[k++]=a[j++];
		}
	}
	while(i<=mid)
	{
		tmp[k++]=a[i++];
	}
	while(j<=right)
	{
		tmp[k++]=a[j++];
	}
	for(i=0;i<k;i++)
	{
		a[left+i]=tmp[i];
	}
}

void mergesort(int *a,int left,int right,int *tmp)
{
	int mid=(left+right)/2;
	if(left<right)
	{
		mergesort(a,left,mid,tmp);
		mergesort(a,mid+1,right,tmp);
		merge(a,left,mid,right,tmp);
		
	}
}
void myPrint(int *a,int len)
{
	int i;
	
	for(i=0;i<len;i++)
	{
		printf("%d ",a[i]);
	}
}

int main()
{
	int a[]={9,8,7,6,5,4,3,2,1,0};
	int tmp[10];
	int len=sizeof(a)/sizeof(a[0]);
	mergesort(a,0,9,tmp);
	myPrint(a,len);
	printf("\n");
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值