常见的排序方法 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;

}

内容概要:本文档系统性地介绍了2024年最新提出的两种智能优化算法——青蒿素优化算法与霜冰优化算法(RIME)的原理、实现方法及其性能对比分析,并提供了完整的Matlab代码实现。文档不仅聚焦于核心算法的仿真与验证,还整合了大量前沿科研资源,涵盖微电网优化、风电功率预测、无人机三维路径规划、电动汽车调度、图像融合、负荷预测、通信信号处理、电力系统故障恢复等多个高价值应用场景。所有案例均基于Matlab/Simulink平台进行建模与仿真,强调算法在复杂工程系统中的实际应用能力,旨在为科研人员提供一套从理论到代码再到应用的完整复现体系。; 适合人群:具备一定编程基础和科研背景的研究生、高校教师及工程技术人员,尤其适合从事智能优化算法研究、新能源系统优化、自动化控制、电力系统调度、无人机导航与路径规划等相关领域的研究人员。; 使用场景及目标:①用于高水平学术论文的复现与创新性研究,提升科研效率与成果产出;②应用于复杂工程系统的建模仿真与智能优化设计,如多能互补系统调度、无人机避障路径规划、微电网能量管理等;③作为智能优化算法的教学与学习资料,深入理解现代元启发式算法的设计思想与实现机制。; 阅读建议:建议读者结合文档中提供的Matlab代码与Simulink仿真模型,按照目录结构循序渐进地学习与实践,优先选择与自身研究方向契合的案例进行代码复现,重点关注算法参数设置、收敛曲线分析与多算法对比实验部分,以全面提升算法应用与科研创新能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值