选择排序&插入排序&冒泡排序&快速排序算法实现

#include<iostream.h>
#include <stdio.h>
//===========
//排序算法
//
//排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,
//若经过排序,这些记录的相对次序保持不变,即在原序列中,
//ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
//        稳定性  时间     空间  适用情况
//1.选择  不稳定  O(n2)    O(1)    n较小时,对稳定性不作要求时宜用选择排序
//2.插入  稳定    O(n2)    O(1)    速度较慢,但参加排序的序列局部或整体有序时;n值较小,要求稳定
//3.冒泡  稳定    O(n2)    O(1)    速度较慢,但参加排序的序列局部或整体有序时;n值较小,要求稳定
//4.快速  不稳定 O(nlog2n) O(1)    不适合有序序列;当n较大时,关键字元素比较随机,对稳定性没要求

//选择排序
void selectSort(int a[],int n)
{
	if(n<=0)
		return;
	int tmp,k;
	for(int i=0;i<n-1;i++)
	{
		tmp=a[i];
		k=i;
		int j=i+1;
		while(j<=n-1)
		{
			if(a[j]<tmp)
			{
				tmp=a[j];
				k=j;
			}
			else
				j++;
		}
		if(k!=i)
		{
			a[k]=a[i];
			a[i]=tmp;
		}
	}
}

//插入排序
void insertSort(int a[],int n)
{
	if(n<=0)
		return;
	for(int i=1;i<=n-1;i++)
	{
		int tmp=a[i];
		for(int j=i-1;j>=0;j--)
		{
			if(tmp<a[j])
			{
				a[j+1]=a[j];
			}
			else
			{
				break;
			}
		}
		a[j+1]=tmp;
	}
}
//冒泡排序
void bubbleSort(int a[],int n)
{
	if(n<=0)
		return;
	int flag=0;
	for(int i=n-1;i>0;i--)
	{
		flag=0;
		for(int j=0;j<i;j++)
		{
			if(a[j]>a[j+1])
			{
				int tmp=a[j];
				a[j]=a[j+1];
				a[j+1]=tmp;
				flag=1;
			}
			if(flag==0)
				break;
		}
	}

}
//快速排序
void quickSort(int a[],int s,int t)
{
	//判断参数
	if(s<0 || t<0)
		return;
	if(s > t)
		return;
	int i=s+1;
	int j=t;
	int x=a[s];
	while(i<=j)
	{
		while(a[i]<=x && i<=j) i++;
		while(a[j]>=x && i<=j) j--;
		if(i<j)
		{
			int tmp=a[i];
			a[i]=a[j];
			a[j]=tmp;
			i++;
			j--;
		}
	}
	if(s!=j)
	{
		a[s]=a[j];
		a[j]=x;
	}
	if(s<j-1)
		quickSort(a,s,j-1);
	if(j+1<t)
		quickSort(a,j+1,t);
}
void output(int a[],int n)
{
	if(n<=0)
	{
		cout<<endl;
		return;
	}
	for(int i=0;i<n;i++)
		cout<<a[i]<<" ";
	cout<<endl;
}
//========测试用例========
void Test1()
{
	cout<<"测试用例1"<<endl;
	int a[]={2,4,6,3,8};
	int n=5;
	output(a,5);
	//selectSort(a,5);
	//insertSort(a,n);
	//bubbleSort(a,n);
	quickSort(a,0,n-1);
	output(a,5);
}
//数组中为1个元素
void Test2()
{
	cout<<"测试用例2"<<endl;
	int a[]={2};
	int n=1;
	output(a,n);
	//selectSort(a,n);
	//insertSort(a,n);
	//bubbleSort(a,n);
	quickSort(a,0,n-1);
	output(a,n);
}
void Test3()
{
	cout<<"测试用例3"<<endl;
	int a[]={2};
	int n=0;
	output(a,n);
	//selectSort(a,n);
	//insertSort(a,n);
	//bubbleSort(a,n);
	quickSort(a,0,n-1);
	output(a,n);
}
void main()
{
	Test1();
	Test2();
	Test3();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值