1冒泡排序(Bubble Sort)
时间复杂度: \(O(n^2)\)
void mp()//自定义mp()函数
{
for(int i=1;i<=n-1;i++)
{
for(int j=1;j<=n-i;j++)
{
if(a[j]>a[j+1])//相邻元素比较,若逆序则交换(升序为左大于右,降序反之)
{
swap(a[j],a[j+1]);
}
}
}
}
2选择排序(Selection sort)
讲解:它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
最好复杂度:\(O(n^2)\)
最坏复杂度:\(O(n^2)\)
void sz()
{
for(int i=1;i<=n-1;i++)
{
int minn=i;
for(int j=1;j<=n-i;j++)
{
if(a[j]<a[minn])
{
minn=j;
}
}
swap(a[j],a[minn]);
}
}
3插入排序(Insertion Sort)
讲解:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
时间复杂度:\(O(N^ ( 1-2) )\)
void cr()
{
for(int i=2;i<=n;i++)
{
int k=1;
int tmp =a[i];
while(a[k]<a[i])
{
k++;
}
for(int j=i-1;j>=k;j--)
{
a[j+1]=a[j];
}
a[k]=tmp;//插入
}
}
4Sort排序
时间复杂度:\(O(nlogn)\)
bool cmp(int a,int b)
{
return a < b;
}
int main()
{
sort(a,a+n+1,cmp);
}
标签:常用,int,void,元素,序列,排序,复杂度
From: https://www.cnblogs.com/AZAjr09-123/p/18240826