排序(1)
1、选择排序
选择排序的思想是:不断将最小数放在最前直到排完 时间复杂度O(n^2)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=10001;
int main()
{
int n,k,i,j;
float temp,a[MAXN];
cin>>n;
for(i=0;i<=n;i++)
cin>>a[i];
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[j]<a[k]) k=j;
if(k!=i)
{
swap(a[i],a[k]);
}
}
for(i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
2、冒泡排序
冒泡排序的思想个人认为与选择排序类似只是换成把最大的放在最后 时间复杂度O(n^2)
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int MAXN=10001; int main() { int n,i,j; float a[MAXN]; cin>>n; for(i=0;i<=n;i++) cin>>a[i]; for(i=n-1;i>=1;i--) for(j=0;j<i;j++) if(a[j]>a[j+1]){ swap(a[j],a[j+1]); } for(i=0;i<n;i++) cout<<a[i]<<" "; return 0; }
3、插入排序
顾名思义插入每输入一个插到适合的位置 时间复杂度O(n^2)#include <stdio.h>
#include <stdlib.h>
using namespace std;
int a[10001];
int main()
{
int i=0,j=0,k=0;
for(k=1;k<10;k++)
{
cin>>a[k];
}
for(i=2;i<10;i++)
{
a[0]=a[i];
for(j=i-1;a[0]<a[j];j--)
{
a[j+1]=a[j];
}
a[j+1]=a[0];
}
for(k=1;k<10;k++)
{
printf("%3d",a[k]);
}
return 0;
}
4、桶排序
桶排序思想为开一个很长的一维数组并初始为零,输入数据,输入几则对应下表的数加1 最后从前往后输出数组中不为零的下标 时间复杂度O(n) 缺点:空间复杂度很高
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=10001;
int main()
{
int n,i,j,K;
float a[MAXN];
memset(a,0,sizeof(a));
cin>>n;
for(i=1;i<=n;i++)
{
cin>>k;a[K]++;
}
for(i=0;i<=100;i++)
{
while(a[i]>0)
{
cout<<i<<" ";
a[i]--;
}
}
return 0;
}