冒泡排序(稳定)
时间复杂度:O(n2)
#include<iostream>
using namespace std;
void BubbleSort(int a[],int n)
{
int flag,temp;
for(int i=0;i<n-1;i++)
{
flag=0;//判断本趟排序,关键字是否发生了交换
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=1;
}
}
if(flag==0)//没有关键字交换,排序结束
return ;
}
}
int main()
{
int a[]={2,3,7,5,11,1,22,6};
BubbleSort(a,8);
for(int i=0;i<8;i++)
cout<<a[i]<<" ";
}
快速排序(不稳定)
由冒泡排序改进
时间复杂度:最好情况O(nlog2n),最坏情况O(n2) ,平均情况O(nlog2n)
快速排序的排序趟数与初始序列有关
#include<iostream>
using namespace std;
void quicksort(int a[],int l,int r)
{
if(l<r)
{
int i=l,j=r,x=a[i];
while(i<j)
{
while(i<j&&a[j]>x) //寻找后面比x小的数
j--;
if(i<j)
a[i++]=a[j]; //比x大的数放到前 面
while(i<j&&a[i]<x) //寻找前面比x大的数
i++;
if(i<j)
a[j--]=a[i]; //比x小的数放到后面
}
a[i]=x; //一轮排序后,将x放回序列
quicksort(a,l,i-1); //递归
quicksort(a,i+1,r);
}
}
int main()
{
int a[7]={1,5,3,2,53,6,7},i,l=0,r=6;
quicksort(a,l,r);
for(i=0;i<=r;i++)
cout<<a[i]<<" ";
}