#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();
}
选择排序&插入排序&冒泡排序&快速排序算法实现
最新推荐文章于 2021-03-09 20:21:39 发布