排序方法多种多样,冒泡排序与桶排是最基础的。
首先是冒泡排序
冒泡排序是最基础的排序,它的原理也很简单,那就是重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来(顺序随便定),而它的效果则是这样:
初始状态: 158 39 130 169 156
第一次交换:39 158 130 169 156
第二次交换:39 130 158 169 156
第三次交换:39 130 158 156 169
第四次交换:39 130 156 158 169
它的时间复杂度最坏为O(n^2),最好为O(n)。
代码是很简单的:
#include<bits/stdc++.h>
using namespace std;
void bubble_sort(int A[],int len)
{
for(int i=0;i<len-1;++i)
{
for(int j=0;j<len-1-i;++j)
{
if(A[j]>A[j+1]) swap(A[j],A[j+1]);
}
}
}
int main()
{
int A[10]={5,2,1,9,8,0,7,3,6,4};
bubble_sort(A,10);
for(int i=0;i<10;++i)
cout<<A[i]<<" ";
cout<<endl;
return 0;
}
而桶排呢,就是暴力大模拟了,简单地说,就是每进来一个数据,就给它安排个房间,而它是几,房间编号就是几,最后从编号小的开始,一个一个向后找,房间中有几个元素,就输出几次房间号,配合上map更好。代码也简单:
#include<bits/stdc++.h>
using namespace std;
int b[233*10086];
int main()
{
int n,maxn=0;
cin>>n;
for(int i=1;i<=n;i++)
{
int tmp;
cin>>tmp;
b[tmp]++;
maxn=max(maxn,tmp);
}
for(int i=1;i<=maxn;i++)
while(b[i]>0)
{
cout<<i<<" ";
b[i]--;
}
return 0;
}