当我输入100000000时,complier show killed [关闭]

问题描述 投票:-1回答:1
/* Copy the remaining elements of L[], if there are any */
while (i < n1) { 
    arr[k] = L[i];
    i++; 
    k++; 
}

我的代码是:

// Merge Sort Version
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include <string.h>
void *memcpy(void *dest, const void *src, size_t n); 
void merge(long arr[], long l, long m, long r) { 
    long i, j, k; 
    long n1 = m - l + 1; 
    long n2 = r - m; 
    /* create temp arrays */
    long *L=malloc(sizeof(long)*n1);
    long *R=malloc(sizeof(long)*n2);
    /* Copy data to temp arrays L[] and R[] */
    //for (i = 0; i < n1; i++) {    L[i] = arr[l + i];} 
    memcpy(L, &arr[l], n1*sizeof(arr[l]));
    //for (j = 0; j < n2; j++) {    R[j] = arr[m + 1 + j];} 
    memcpy (R,&arr[m+1],n2*sizeof(arr[m+1]));
    /* Merge the temp arrays back into arr[l..r]*/
    i = 0; // Initial index of first subarray 
    j = 0; // Initial index of second subarray 
    k = l; // Initial index of merged subarray 
    while (i < n1 && j < n2) { 
        if (L[i] <= R[j]) { 
            arr[k] = L[i]; 
            i++; 
        } 
        else { 
            arr[k] = R[j]; 
            j++; 
        } 
        k++; 
    } 

    /* Copy the remaining elements of L[], if there are any */
    while (i < n1) { 
        arr[k] = L[i];
        i++; 
        k++; 
    }

    /* Copy the remaining elements of R[], if there are any */
    while (j < n2) { 
        arr[k] = R[j]; 
        j++; 
        k++; 
    } 
} 

/* l is for left index and r is right index of the sub-array of arr to be sorted */
void mergeSort(long *arr, long l, long r) { 
    if (l < r) { 
        // Same as (l+r)/2, but avoids overflow for large l and h 
        long m = l + (r - l) / 2; 
        // Sort first and second halves 
        mergeSort(arr, l, m); 
        mergeSort(arr, m + 1, r); 
        merge(arr, l, m, r); 
    } 
} 

void printArray(long A[], long size) { 
    for (long i = 0; i < size; i++) 
        printf("%ld ", A[i]); 
    printf("\n"); 
} 
void randArray(long A[],long size){
    for (long i = 0; i < size; i++)
        A[i]=(rand()%10000);
}
/* Driver program to test above functions */
int main(int argc, char** argv) { 
    srand(time(0));//亂數要的
    /********** Create and populate the array **********/
    long n=2<<24;
    n = atoi(argv[1]);
    long *arr = malloc(n * sizeof(long));
    srand(time(NULL));
    /********** Initialize Array **********/
    memset(arr,0,sizeof(n));
    /********** Random generation **********/
    randArray(arr,n);
    long arr_size =n; 
    printf("This is the unsorted array:"); 
    printArray(arr, arr_size); 
    //開始計時
    double START, END;
    START = clock();
    mergeSort(arr, 0, arr_size - 1); 
    printf("This is the Sorted array:"); 
    printArray(arr, arr_size);  
    END = clock();
    printf("time is %.7f\n", (END - START) / CLOCKS_PER_SEC);
    /********** Clean up rest **********/
    free(arr);
    return 0; 
} 
c memcpy
1个回答
-1
投票

例如

    while (i < n1) { 
        arr[k] = L[i];
        i++; 
        k++; 
    }
memcpy(arr + k, L + i, (n1 - i) * sizeof(*arr));
© www.soinside.com 2019 - 2024. All rights reserved.