三种时间复杂度为n2的算法
1.冒泡排序的两种写法
(1).第一个,第二个…分别与后面的数比较
void Bullensort(int k[],int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(k[i]>k[j])
{
int temp=k[i];
k[i]=k[j];
k[j]=temp;
}
}
}
}
(2)相邻的两个数一直比较,最大的放在最后面
void Bullersort(int k[],int n)
{
bool flag=true;
for(int i=0;i<n-1 && flag;i++)
{
flag=false;
for(int j=0;j<n-1-i;j++)
{
if(k[j]>k[j+1])
{
int temp=k[j];
k[j]=k[j+1];
k[j+1]=temp;
flag=true;
}
}
}
}
冒泡排序的优化,若已经达到排序状态,则每次的if(比较)不会执行,通过flag标志可以停止比较,达到优化。
2.选择排序
特点:每次大循环找出最所有元素的最小值的下标;该元素与内循环的开始元素互换位置;
void Selectsort(int k[],int n)
{
for(int i=0;i<n-1;i++)
{
int min=i;
for (int j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
min=j;//找出每次最小元素的下标
}
}
//交换在循环外面
if(min!=i)
{
int temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
}
3.插入排序
void Insretsort(int k[],int n)
{
for(int i=1;i<n;i++)
{
int temp=k[i];//将要插入的元素保存起来
int j=i-1;
while(j>0&&k[j]<temp)//分别于前面的元素比较大小,直到遇到比它小的元素,停止
{
k[j]=k[j+1];
j++;
}
a[j]=temp;//将要插入的元素插入到合适的位置
}
}