/*
信息获取后通常需要进行一定的处理和规划,从而使得处理后的结果更加符合人们
使用的习惯。然而,对于信息处理的方式有很多,包括查找,排序,插入,删除,归并
等操作,接下来,我们就详细的介绍几种常用的排序算法,目的就是让大家对于已有的
排序算法有一个更好的认识和整理。
---------------------------
一:选择排序:
最简单的一种排序方式,叫选择排序。
也就是从第一步起,将第一个数字与每一个数字进行大小的比较,若比它大,
就让这个大的数字与第一个数字交换,比较结束后,第一个数字就是最大的数。
同理,第二步,让第二个数依次与他后面的每个数字进行比较,我们就得到了
次大的数。。。。。。
一直到最后一步,那么注意,这时只用让倒数第二个数字与倒数第一个数字
进行比较就可以了,用来决定最小的数字,这样的几趟下来,我们就得到了这个
数字从大到小的排序,,,,
分析下时间复杂度吧,选择排序的时间复杂度应该很容易分析的出来,因为、
在这个过程中设计两个for循环,所以为O(n^2)
*/
//核心算法:
void SelectSort( int a[] )
{
for ( int i = 0;i < n;i++ )
{
for ( int j = i+1;j < n-1;j++ )
{
if ( a[i] < a[j] )
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
}
//完整代码如下:
# include<cstdio>
# include<iostream>
# include<iomanip>
using namespace std;
# define MAX 100+10
int a[MAX];
int main(void)
{
int n;cin>>n;
int t;
for ( int i = 0;i < n;i++ )
cin>>a[i];
for ( int i = 0;i < n-1;i++ )
{
for ( int j = i+1;j < n;j++ )
{
if ( a[i] < a[j] )
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
for ( int i = 0;i < n;i++ )
cout<<setw(5)<<a[i];
return 0;
}
/*
二:冒泡排序
第二种最为常见的排序算法就是冒泡排序了,为什么叫冒泡排序呢?其实,光从名字上,我们就知道
了,只要这个排序的过程其实就像是一个泡跑在上升的过程一样,他每次的排序都是让最小的数被甩在了
底部,让最大的数字飘到的了顶部,当然这里的底部和顶部都是相对于一个数组来说的,a[0]表示的就是
顶部,a[n-1]表示的就是底部,注意这里的第一个数字开始都是保存在a[0]中的。
三:桶排序
第三种介绍的也是一个较为常见的方法,那就是我们常说的桶排序了。顾名思义,由桶排序,我们就知道了
在这个排序的过程中会不会出现一个桶呢?当然,桶是假想的,他其实就像一个容器一样,把我们要输入的关键
字记录下来,然后在排序桶的编号的过程。。。
下来就来具体的阐明下桶排序的思想了~
桶排序的思想是若待排序的关键字在一个明显的范围内时(当然说的是整数了),我们就可以设计有限个桶,
每个桶装入一个值(当然也可以装入若干个值,这就涉及到较为高级的桶排序了),然后只需要依次顺序输出各
桶的值就可以了,最后我们就得到了有序的序列。
*/
# include<cstdio>
# include<iostream>
# include<cstring>
using namespace std;
# define MAX 100+10
int a[MAX];
int main(void)
{
int n;cin>>n;
int k;
memset(a,0,sizeof(a));
for ( int i = 0;i < n;i++ )
{
cin>>k;
a[k]++;//这里的a[]就就相当于我们所设计出来的桶了~
}
for ( int i = 0;i < n;i++ )
{
while ( a[i] > 0 )
{
cout<<i<<" ";
a[i]--;
}
}
return 0;
}