垃圾萌新写的博客,有误有蒙请指出!!!
1-选择排序Selectionsort
时间复杂度:O(n^2)(平均)/O(n^2)(最优)/O(n^2)(最差)
空间复杂度:O(1)
稳定性:不稳定
选择排序,很简单,就是每次选出最小的拿出来存在序列里。
然后最小的拿走之后,剩下来的就是第二小的,把它放在最小的后面。
然后是第三小的,放在第二小的后面
然后是第四小……第五小……
一直到最大,排序就结束了
图片演示(来源网络)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int len,a[100]={99999999};
void Selectionsort(int a[])
{
int Min;
for(int i=1;i<=len;i++)//个人习惯从1开始计数
{
Min=0;//将a[Min]存为较大值(这里我a[0]设置为99999999)
for(int j=i;j<=len;j++)
{
if(a[j]<a[Min])
Min=j;
}//寻找剩余数列中的最小值下标
swap(a[i],a[Min]); //交换两者的位置,将选出的最小数置于正确的位置
}
}
int main()
{
cin>>len;
for(int i=1;i<=len;i++)
{
cin>>a[i];
}//输入
Selectionsort(a);
for(int i=1;i<=len;i++)
{
cout<<a[i]<<" ";
}//输出
}
2-插入排序Insertion Sort
(先放图和代码,有空再更~)
图片演示(来源网络)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int len,a[100];
void InsertionSort(a[])
{
for(int i=1;i<=len;i++){//对每一个数依次进行操作
while(a[i-1]>a[i])
swap(a[i-1],a[i]);//不断与上一个数交换直到处于正确的位置
}
}
int main()
{
cin>>len;
for(int i=1;i<=len;i++)
cin>>a[i];//输入
InsertionSort(a);
for(int i=1;i<=len;i++)
cout<<a[i]<<" ";//输出
}