zoukankan      html  css  js  c++  java
  • 基本的排序

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <algorithm>
    #include <map>
    #include <vector>
    #include <set>
    #include <queue>
    #include <stack>
    #include <math.h>
    
    using namespace std;
    
    struct ListNode
    {
        int value;
        ListNode* next;
        ListNode(int value)
        {
            this->value = value;
        }
    };
    
    void BubbleSort(vector<int> &array)
    {
        int len = array.size();
    
        for(int i=0;i<len;i++)
        {
            int tag=0;
            for(int j=0;j<len-i-1;j++)
            {
                if(array[j]>array[j+1])
                {
                    swap(array[j],array[j+1]);
                    tag=1;
                }
            }
            if(!tag)
                break;
        }
    }
    
    void SelectionSort(vector<int> &array)
    {
        int len = array.size();
        for(int i=0;i<len;i++)
        {
            int m = i;
            for(int j=i+1;j<len;j++)
            {
                if(array[m]>array[j])
                {
                    m=j;
                }
            }
            swap(array[i],array[m]);
        }
    }
    
    void InsertSort(vector<int> &array)
    {
        int len = array.size();
        for(int i=0;i<len;i++)
        {
            for(int j=i;j>0;j--)
            {
                if(array[j]<array[j-1])
                {
                    swap(array[j],array[j-1]);
                }
                else
                    break;
            }
        }
    }
    
    void ShellSort(vector<int> &array)
    {
        int len = array.size();
        int distance = len / 2;
        while(distance)
        {
            for(int i=0;i<distance;i++)
            {
                for(int j=i;j<len;j+=distance)
                {
                    for(int k=j;k>i;k-=distance)
                    {
                        if(array[k]<array[k-distance])
                        {
                            swap(array[k],array[k-distance]);
                        }
                        else
                            break;
                    }
                }
            }
    
            distance/=2;
        }
    }
    
    void CountSort(vector<int> &array)
    {
    
        int maxNum=array[0];
        int len = array.size();
        for(int i=1;i<len;i++)
        {
            maxNum = max(maxNum,array[i]);
        }
    
        int count[maxNum+1];
        memset(count,0, sizeof(count));
        for(int i=0;i<len;i++)
        {
            count[array[i]]++;
        }
    
        array.clear();
    
        for(int i=0;i<=maxNum;i++)
        {
            while(count[i]) {
                array.push_back(i);
                count[i]--;
            }
        }
    
    }
    
    void BucketSort(vector<int>& array)
    {
        int len = array.size();
        if(len<=1)
            return;
    
        int minNum = array[0];
        int maxNum = array[0];
    
        for(int i=1;i<len;i++)
        {
            minNum = min(minNum,array[i]);
            maxNum = max(maxNum,array[i]);
        }
        if(minNum==maxNum)
            return;
    
        int n=1;
        int len2 = maxNum-minNum+1;
        if(len2>5)
        {
            n=2;
            len2 = (maxNum-minNum+1)/n + 1;
        }
        vector<int> buckets[len2];
    
        for(int i=0;i<len;i++)
        {
            buckets[(array[i]-minNum)/n].push_back(array[i]);
        }
    
        for(int i=0;i<len2;i++)
        {
            BucketSort(buckets[i]);
        }
    
        array.clear();
        for(int i=0;i<len2;i++)
        {
            for(int j=0;j<buckets[i].size();j++)
            {
                array.push_back(buckets[i][j]);
            }
        }
    
    }
    
    int getdigitNum(int x)
    {
        int res=0;
        while(x)
        {
            x/=10;
            res++;
        }
        return res;
    }
    
    int getdigit(int x,int i)
    {
        while(i)
        {
            x/=10;
            i--;
        }
    
        return x%10;
    }
    
    void radixSort(vector<int>& array)
    {
        vector<int> a[10];
    
        int len = array.size();
        int times =0;
        for(int i=0;i<len;i++)
        {
            times = max(times,getdigitNum(array[i]));
        }
    
        for(int i=0;i<times;i++)
        {
            for(int j=0;j<10;j++)
                a[j].clear();
    
            for(int j=0;j<len;j++)
            {
                int number = getdigit(array[j],i);
                a[number].push_back(array[j]);
            }
    
            array.clear();
            for(int j=0;j<10;j++)
            {
                for(int k=0;k<a[j].size();k++)
                    array.push_back(a[j][k]);
            }
        }
    
    }
    
    
    #define MAX 100
    int b[MAX];
    void init2()
    {
        for(int i=0;i<MAX;i++)
        {
            b[i]=rand() % 100000;
        }
    }
    
    void init(vector<int>& array)
    {
        array.clear();
    
        for(int i=0;i<MAX;i++)
        {
            array.push_back(b[i]);
        }
    }
    
    
    int main()
    {
    
        init2();
        vector<int> array;
        init(array);
    
        BubbleSort(array);
    
        for(int i=0;i<array.size();i++)
        {
            cout<<array[i]<<" ";
        }
        cout<<endl;
    
        init(array);
        SelectionSort(array);
    
        for(int i=0;i<array.size();i++)
        {
            cout<<array[i]<<" ";
        }
        cout<<endl;
    
        init(array);
        InsertSort(array);
        for(int i=0;i<array.size();i++)
        {
            cout<<array[i]<<" ";
        }
        cout<<endl;
    
        init(array);
        ShellSort(array);
        for(int i=0;i<array.size();i++)
        {
            cout<<array[i]<<" ";
        }
        cout<<endl;
    
        init(array);
        CountSort(array);
        for(int i=0;i<array.size();i++)
        {
            cout<<array[i]<<" ";
        }
        cout<<endl;
    
        init(array);
        BucketSort(array);
        for(int i=0;i<array.size();i++)
        {
            cout<<array[i]<<" ";
        }
        cout<<endl;
    
        init(array);
        radixSort(array);
        for(int i=0;i<array.size();i++)
        {
            cout<<array[i]<<" ";
        }
        cout<<endl;
    }
    
  • 相关阅读:
    [DOJ练习] 无向图的邻接矩阵表示法验证程序
    [DOJ练习] 求无向图中某顶点的度
    [邻接表形式]有向图的建立与深度,广度遍历
    [DOJ练习] 有向图的邻接表表示法验证程序(两种写法)
    [Java 学习笔记] 异常处理
    [总结]单源最短路(朴素Dijkstra)与最小生成树(Prim,Kruskal)
    时间选择插件jquery.timepickr
    页面值传入后台出现中文乱码
    CheckTreecheckbox树形控件
    JQuery EasyUI DataGrid
  • 原文地址:https://www.cnblogs.com/dacc123/p/12575359.html
Copyright © 2011-2022 走看看