几种排序算法

#include<stdio.h>
int Compare(int a,int b)//用于控制升序或降序(改变不等号方向) 
{
	
	if(a<=b)return 1;
	else return 0;
}
void Swap(int *a,int *b)
{
	int temp=*a;
	*a=*b;
	*b=temp;
}

//冒泡排序 
void BubbleSort(int *a,int len)
{
	int i,j,flag;
	for(i=0;i<len-1;i++)
	{
		flag=1;
		for(j=0;j<len-1-i;j++)
		{
			if(Compare(a[j],a[j+1]))Swap(&a[j],&a[j+1]);
			flag=0;
		}
		if(flag)break;//flag==1说明上一轮没有交换数字,数组已经有序,可以结束冒泡排序 
	}
}

//选择排序
void SelectSort(int *a,int len)
{
	int index,i,j;
	for(i=0;i<len;i++)
	{
		index=i;
		for(j=i;j<len;j++)
		{
			if(Compare(a[index],a[j]))index=j;
		}
		Swap(&a[index],&a[i]);
	}
}

//交换排序
void  SwapSort(int *a,int len)
{
	int i,j;
	for(i=0;i<len;i++)
	{
		for(j=i+1;j<len;j++)
		{
			if(Compare(a[i],a[j]))Swap(&a[j],&a[i]);
		}
	}
}

//快速排序
void QuickSort(int *a,int start,int end)//注意下标范围 
{
	if(start>end)return;//数组已经排序完成,结束递归 
	int left=start,right=end;
	int temp=a[left]; 
	while(left!=right)//left和right碰头时结束循环
	{
		//以下两个while循环在a[right]或a[left]==temp时要继续进行,否则会死循环 
		while(Compare(a[right],temp)&&right>left)right--;
		while(Compare(temp,a[left])&&right>left)left++;
		if(right>left)
		{
			Swap(&a[left],&a[right]);
		}
	}
	//将原数组第一个数放入中间特定位置,使数组分为两部分 
	a[start]=a[left];
	a[left]=temp;
	//递归 对左右两个小区间进行快速排序 
	QuickSort(a,start,left-1);
	QuickSort(a,left+1,end);
} 

int main()
{
	int a[6]={1,7,6,2,1,5},i;
	SelectSort(a,6);
	for(i=0;i<6;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值