1. 程式人生 > >C++DLL匯出類(快排,堆排,插入排序,選擇排序,氣泡排序)

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