用C/C++码经典算法

Posted dianesohungry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C/C++码经典算法相关的知识,希望对你有一定的参考价值。

1 排序

桶排序

时间复杂度 O(N+M), N为待排序数的个数,M为桶的个数(即数的范围)

空间复杂度 O(M),M为桶的个数(即数的范围)

优点

· 快速

缺点:

· 空间消耗大
· 被排序的数组元素只能是整数
· 这还不是一个真正意义上的桶排序,因为只能对数进行排序,而不涉及数对应的项

代码

// 对数据范围在 0~10000 之间的整数进行排序
#include <iostream>
using namespace std;

int main()

    int bucket[10001],n,tmp,i;
    // init array book with 0s
    for(i=0;i<=10001;i++)
        bucket[i]=0;
    // take input
    scanf("%d",&n);
    for(i=0;i<n;i++)
    
        scanf("%d",&tmp);
        bucket[tmp]++;
    
    // sort and print
    for(i=0;i<10001;i++)
    
        while(bucket[i]>0)
        
            cout<<i<<' ';
            bucket[i]--;
        
    

冒泡排序

时间复杂度 O(N^2), N为待排序数的个数

空间复杂度 O(N)

缺点:

· 慢

代码

// 冒泡排序(从大到小)
#include <iostream>
using namespace std;

struct student

    char name[10];
    int weight;
;

int main()

    struct student bubble[100],tmp;
    int n,i,j;
    // take input
    scanf("%d", &n);
    for(i=0;i<n;i++)
    
        scanf("%s", bubble[i].name);
        scanf("%d", &bubble[i].weight);
    
    // sort
    for(i=0;i<n;i++)
    
        for(j=0;j<n-i-1;j++)
        
            if(bubble[j].weight < bubble[j+1].weight)
            
                tmp = bubble[j+1];
                bubble[j+1] = bubble[j];
                bubble[j] = tmp;
            
        
    
    // print
    for(i=0;i<n;i++)
        cout << bubble[i].name <<' ' << bubble[i].weight << endl;
    return 0;
    

以上是关于用C/C++码经典算法的主要内容,如果未能解决你的问题,请参考以下文章

盘点 10 种经典排序算法!建议收藏

《算法竞赛入门经典(第二版)》pdf

cc++面试------17道经典面试题目分析

经典算法动画解析系列:选择排序

每日一书|世界上代码量很少的经典算法是什么样的?

用 Python 实现十大经典排序算法