1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
#include <iostream>
using namespace std;
template<typename mtype>
void merge(mtype* a, unsigned int ileft, unsigned int imiddle, unsigned int iright)
{
unsigned int i=ileft;
unsigned int j=imiddle;
unsigned int k=ileft;
mtype* b= new mtype[iright-ileft+1];
while (i<imiddle || j<iright)
{
if (i<imiddle && j<iright)
{
if (a[i]<a[j])
{
b[k]=a[i] ; k++ ; i++;
}
else
{
b[k]=a[j] ; k++ ; j++;
}
}
else if (i==imiddle)
{
b[k]=a[j] ; k++ ; j++;
}
else if (j==iright)
{
b[k]=a[i] ; k++ ; i++;
}
}
for (unsigned int d=ileft ; d<iright ; d++)
{
a[d]=b[d];
}
delete b;
}
template<typename mtype>
void sort(mtype* a, unsigned int n)
{
for (unsigned int window=1 ; window<n ; window*=2)
{
for (unsigned int i=0 ; i < n ; i+=window*2)
{
unsigned int left=i;
unsigned int middle=i+window;
unsigned int right=i+2*window;
merge<mtype>(a, left,middle,right);
}
}
}
int main()
{
int a[10];
a[0]=2;
a[1]=3;
a[2]=5;
a[3]=12;
a[4]=14;
a[5]=4;
a[6]=9;
a[7]=10;
a[8]=40;
a[9]=43;
//merge<int>(a, 0,5,9);
sort<int>(a,10);
for (unsigned int d=0 ; d<10 ; d++)
{
cout << "a[" << d << "]=" << a[d] << endl;
}
} |