C / C ++コードの古典的なアルゴリズムで

ソート

バケットソート

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;
    
}

おすすめ

転載: www.cnblogs.com/DianeSoHungry/p/11247956.html
おすすめ