Tuesday, August 08, 2006

source code for divide-and-conquer

#include "iostream"
#include "malloc.h"

using namespace std;

#define SIZE 100000

void merge(int *A, int p, int q, int r)
{
__int i,j,k,n1,n2;
__int *L,*R;
__n1 = q-p+1;
__n2 = r-q;
__L = (int*)malloc(n1*sizeof(int));
__R = (int*)malloc(n2*sizeof(int));
__for ( i = 0,j = p; i < n1; i++,j++ )
____L[i] = A[j];
__for ( i = 0,j = q+1; i < n2; i++,j++ )
____R[i] = A[j];
__for ( i=0,j=0,k=p; i < n1 && j < n2; ) {
____if ( L[i] <= R[j] )
______A[k++] = L[i++];
____else
______A[k++] = R[j++];
__}
__if ( i != n1 && j == n2 ) {
____for ( ; i < n1; i++,k++ ) {
______A[k] = L[i];
____}
__}
__if ( i == n1 && j != n2 ) {
____for ( ; j < n2; j++,k++ ) {
______A[k] = R[j];
____}
__}
__free(L);
__free(R);
}

void mergeSort(int *A, int p, int r)
{
__int q;
__if ( p < r ) {
____q = (int)((p+r)/2);
____mergeSort(A,p,q);
____mergeSort(A,q+1,r);
____merge(A,p,q,r);
__}
}

int resource[SIZE];

int main( void )
{
__int i;
__freopen("src.txt","w",stdout);
__for ( i = 0; i < SIZE; i++ ) {
____resource[i] = rand()%10000;
____cout << resource[i] << endl;
__}
__mergeSort(resource,0,SIZE-1);
__freopen("res.txt","w",stdout);
__for ( i = 0; i < SIZE; i++ ) {
____cout << resource[i] << endl;
__}

__return 0;
}

0 Comments:

Post a Comment

<< Home