现在的位置: 首页 > 综合 > 正文

各种排序算法(待续)

2018年04月29日 ⁄ 综合 ⁄ 共 1570字 ⁄ 字号 评论关闭

/*

        信息获取后通常需要进行一定的处理和规划,从而使得处理后的结果更加符合人们
    使用的习惯。然而,对于信息处理的方式有很多,包括查找,排序,插入,删除,归并
    等操作,接下来,我们就详细的介绍几种常用的排序算法,目的就是让大家对于已有的
    排序算法有一个更好的认识和整理。




---------------------------

一:选择排序:

        最简单的一种排序方式,叫选择排序。
    也就是从第一步起,将第一个数字与每一个数字进行大小的比较,若比它大,
    就让这个大的数字与第一个数字交换,比较结束后,第一个数字就是最大的数。
    同理,第二步,让第二个数依次与他后面的每个数字进行比较,我们就得到了
    次大的数。。。。。。
        一直到最后一步,那么注意,这时只用让倒数第二个数字与倒数第一个数字
    进行比较就可以了,用来决定最小的数字,这样的几趟下来,我们就得到了这个
    数字从大到小的排序,,,,
        分析下时间复杂度吧,选择排序的时间复杂度应该很容易分析的出来,因为、
    在这个过程中设计两个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;
}











抱歉!评论已关闭.