常见的排序方法 c++

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;

class sort_scf
{
public:
    int a[20];
    void maopao1(int a[],int len)
    {
        for(int i=0; i<len; i++)
        {
            for(int j=0; j<len-1-i; j++)
            {
                if(a[j]>a[j+1])
                {
                    swap_my(a[j],a[j+1]);
                }
            }
        }
    }
    void maopao2(int a[],int len)
    {
        int flag=true;
        for(int i=0; i<len&&flag; i++)
        {
            flag=false;
            for(int  j=0; j<len-i-1; j++)
            {
                if(a[j]>a[j+1])
                {
                    swap_my(a[j],a[j+1]);
                    flag=true;
                }
            }
        }
    }
    void maopao3(int a[],int len)
    {

        int pos=0;
        int k=len-1;
        int flag;
        for(int i=0; i<len; i++)
        {
            flag=0;
            for(int j=0; j<k; j++)
            {
                if(a[j]>a[j+1])
                {
                    swap_my(a[j],a[j+1]);
                    flag=1;
                    pos=j;
                }
            }
            k=pos;
            if(flag==0)
                return ;
        }
    }
    void jiandan_select(int a[],int len)
    {
        for(int i=0; i<len-1; i++)
        {
            int index=i;
            for(int j=i+1; j<len; j++)
            {
                if(a[j]<a[index])
                {
                    index=j;
                }
            }
            swap_my(a[index],a[i]);
        }
    }
    void charu_sort(int a[],int len)
    {
        for(int i=1; i<len; i++)
        {
            int j;
            for( j=i-1; j>=0; j--)
            {
                if(a[j]<a[i])
                    break;
            }
            if(j!=i-1)
            {
                j++;
                int temp=a[i];
                int k;
                for( k=i; k>j; k--)
                {
                    a[k]=a[k-1];
                }
                a[j]=temp;
            }
        }
    }
    void zheban_charu_sort(int a[],int len)
    {
        for(int i=1; i<len; i++)
        {
            int left=0;
            int right=i-1;
            int temp=a[i];
            while(left<=right)
            {
                int mid=(left+right)/2;
                if(a[mid]<temp)
                {
                    left=mid+1;
                }
                else
                {
                    right=mid-1;
                }
            }
            for(int j=i; j>left; j--)
                a[j]=a[j-1];
            a[left]=temp;
        }
    }
    void shell_sort(int a[],int len)
    {
        cout<<"希尔排序"<<endl;
        for(int gap=len/2; gap>=1; gap/=2)
        {
            for(int i=gap; i<len; i++)
            {
                for(int j=i-gap; j>=0; j-=gap)
                {
                    if(a[j]>a[j+gap])
                        swap_my(a[j],a[j+gap]);
                }
            }
        }
    }
    int quick_solve(int a[],int left,int right)
    {
        int i=0;
        int j=left+1;
        int temp=a[left];
        while(left<right)
        {

            while(left<right&&a[right]>=temp)
                right--;
            if(left<right)
                swap_my(a[left],a[right]);
            while(left<right&&a[left]<=temp)
                left++;
            if(left<right)
                swap_my(a[left],a[right]);
        }

        return left;
    }
    void quick_sort(int a[],int len)
    {
        quick(a,0,len-1);
    }
    void quick(int a[],int left,int right)
    {
        if(left<right)
        {
            int target=quick_solve(a,left,right);
            quick(a,left,target-1);
            quick(a,target+1,right);
        }
    }
    void merge_solve(int a[],int left,int mid,int right)
    {
        int temp[1000];
        memset(temp,0,sizeof(temp));
        int i=left;
        int j=mid+1;
        int k=0;
        while(i<=mid&&j<=right)
        {
            if(a[i]<a[j])
                temp[k++]=a[i++];
            else temp[k++]=a[j++];
        }
        while(i<=mid)
            temp[k++]=a[i++];
        while(j<=right)
            temp[k++]=a[j++];

        for(int i=0; i<k; i++)
            a[i+left]=temp[i];
    }
    void merge_(int a[],int left,int right)
    {
        if(left<right)
        {
            int mid=(left+right)/2;
            merge_(a,left,mid);
            merge_(a,mid+1,right);
            merge_solve(a,left,mid,right);
        }
    }
    void merge_sort(int a[],int len)
    {
        merge_(a,0,len-1);
    }
    void head_build(int a[],int index,int maxx)
    {
        int left=index*2+1;
        int right=left+1;
        int maxx_index=index;
        if(left<maxx&&a[left]>a[maxx_index])
            maxx_index=left;
        if(right<maxx&&a[right]>a[maxx_index])
            maxx_index=right;

        if(maxx_index!=index)
        {
            swap_my(a[index],a[maxx_index]);
            head_build(a,maxx_index,maxx);
        }
    }
    void head_sort(int a[],int len)
    {

        for(int i=len/2-1;i>=0;i--)
            head_build(a,i,len);
        for(int i=len-1;i>=1;i--)
        {
            swap_my(a[0],a[i]);
            head_build(a,0,i);
        }
    }

private:
    void swap_my(int &a,int &b)
    {
        a=a^b;
        b=a^b;
        a=a^b;
    }

};



int  main()
{
    sort_scf solve;
    int ans[20]= {1,2,7,4,8,9,6,3,5,0};
    int b[20];
    memcpy(solve.a,ans,sizeof(int)*20);
    for(int i=0; i<10; i++)
        cout<<solve.a[i]<<" ";
    cout<<endl<<"排序后"<<endl;
//    solve.maopao1(solve.a,10);
//    solve.maopao2(solve.a,10);
    //solve.maopao3(solve.a,10);
    //solve.jiandan_select(solve.a,10);
    //solve.charu_sort(solve.a,10);
    //solve.zheban_charu_sort(solve.a,10);
    // solve.shell_sort(solve.a,10);
//    solve.quick_sort(solve.a,10);
    //solve.merge_sort(solve.a,10);
    solve.head_sort(solve.a,10);
    for(int i=0; i<10; i++)
        cout<<solve.a[i]<<" ";
    cout<<endl;

}

【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析与稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析和控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模与控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析与控制器设计;④通过Matlab代码复现和扩展模型,服务于科研仿真与教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择与平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性和适应性的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值