C++DLL匯出類(快排,堆排,插入排序,選擇排序,氣泡排序)
阿新 • • 發佈:2019-01-25
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;
}