C++DLL导出类(快排,堆排,插入排序,选择排序,冒泡排序)

sort.h

#ifndef SORT_H
#define SORT_H
#ifdef DLL_FILE
    class __declspec(dllexport) sort
#else
    class __declspec(dllimport) sort
#endif
    {
    public:
        int MaoPaoSort(int *R,int len);
        int SelectSort(int *R,int len);
        void QuicklySort(int *R,int s,int t);
        void HeaderSort(int *R,int n);
    private:
        void sift(int *R,int low,int high);//构造堆方法
    };
#endif

sort.cpp

#include "sort.h"
#include <iostream>
using namespace std;
//冒泡排序
int sort::MaoPaoSort(int *R,int len)
{
    bool exchange;
    int tmp,count=0;
    for(int i=0;i<len-1;i++)
    {
        exchange = false;
        for(int j=len-1;j>i;j--)
        {
            if(R[j]<R[j-1])
            {
                tmp=R[j];
                R[j]=R[j-1];
                R[j-1]=tmp;
                count++;
                exchange = true;
            }
        }
        if(!exchange)
        {
            return count;
        }
    }
}
//选择排序
int sort::SelectSort(int *R,int len)
{
    int k;
    int tmp,count=0;
    for(int i=0;i<len-1;i++)
    {
        int j;
        k=i;
        for(j=i+1;j<len;j++)
        {
            if(R[j]<R[k])
            {
                k=j;
            }
        }
        if(k!=i)
        {
            tmp=R[i];
            R[k]=R[i];
            R[i]=tmp;
            count++;
        }
    }
    return count;
}
//快速排序
void sort::QuicklySort(int *a, int s,int t)
{
    int i=s,j=t;
    int tmp;
    if(s<t)
    {
        tmp=a[s];
        while(i!=j)
        {
            while(j>i&&a[j]>=tmp)
            {
                --j;
            }
            a[i]=a[j];
            while(i<j&&a[i]<=tmp)
            {
                ++i;
            }
            a[j]=a[i];
        }
        a[i]=tmp;
        QuicklySort(a,s,i-1);
        QuicklySort(a,i+1,t);
    }
}
//堆排序(构造堆)
void sort::sift(int *R, int low, int high)
{
    int i=low,j=2*i;
    int tmp = R[i];
    while(j<high)
    {
        if (j < high-1 && R[j] < R[j+1])
        {
            j++;
        }
        if (tmp < R[j])
        {
            R[i] = R[j];
            i = j;
            j = 2*i;
        }
        else
        {
            break;
        }
    }
    R[i] = tmp;
}

//堆排序
void sort::HeaderSort(int *R, int n)
{
    int tmp;
    for (int i=n/2-1;i>=0;--i)
    {
        sift(R,i,n);
    }
    for (int i=n-1;i>=1;--i)
    {
        tmp = R[0];
        R[0]=R[i];
        R[i]=tmp;
        sift(R,0,i-1);
    }
}

test.cpp

#include "..\DynamicClass\sort.h"
#pragma comment(lib,"../Debug/DynamicClass.lib"); 
#include <iostream>
using namespace std;

int main()
{
    int a[] ={1,32,23,41,54,7,9,15};
    sort s;
    int count;
    cout<<"原序列"<<endl;
    for (int i=0;i<8;i++)
    {
        cout<<a[i]<<'\t';
    }
    cout<<endl;
    count=s.MaoPaoSort(a,8);
    cout<<"冒泡排序,排序交换次数:"<<count<<endl;
    for (int i=0;i<8;i++)
    {
        cout<<a[i]<<'\t';
    }
    cout<<endl;
    count=s.SelectSort(a,8);
    cout<<"选择排序,排序交换次数:"<<count<<endl;
    for (int i=0;i<8;i++)
    {
        cout<<a[i]<<'\t';
    }
    cout<<endl;
    s.QuicklySort(a,0,7);
    cout<<"快速排序"<<endl;
    for (int i=0;i<8;i++)
    {
        cout<<a[i]<<'\t';
    }
    cout<<endl;
    s.HeaderSort(a,7);
    cout<<"堆排序"<<endl;
    for (int i=0;i<8;i++)
    {
        cout<<a[i]<<'\t';
    }
    cout<<endl;
    getchar();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值