Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I want to compare the sorting speed in java and c++ using an array. I have a pro

ID: 3748014 • Letter: I

Question

I want to compare the sorting speed in java and c++ using an array. I have a program in java, that needs to be translated into c++ with as few as changes as possible.

I also would like my c++ to pass the array by reference (avoid pass by value) between the different functions.

Here is the java code:

import java.util.ArrayList;

import java.util.Random;

import java.util.Arrays;

// Java 8 time library

import java.time.temporal.ChronoUnit;

import java.time.Instant;

public class Project1_2018 {

// For convenience, define RAND_MAX to mimic C++ std::rand() method

static final int RAND_MAX = 32767;

public static void main(String[] args) {

// declare a primitive array to facilitate test runs of various sizes;

// uncomment the last two for your final test run(s)

int[] sizes = { 10, 1000, 10000, 100000 /* , 500000, 1000000 */ };

// declare variables that are initialized/reinitialized later

int[] intArray;

// java.time.Insta;nt is a (potentially) higher-precision timestamp than

// System.currentTimeMillis();

Instant start, finish;

long elapsedTime;

// main for loop drives the number of time trials

for (int sz : sizes) {

System.out.println("Time trial for primitve array " + sz);

System.out.println("=================================================================");

System.out.println("intArray initialization");

start = Instant.now();

intArray = new int[sz];

init(intArray, sz);

finish = Instant.now();

elapsedTime = ChronoUnit.MICROS.between(start, finish);

System.out.println(

"Elapsed time for intializing a primitive array of " + sz + " elements: " + elapsedTime + " ");

System.out.println("intArray before sorting");

print(intArray);

System.out.println("intArray isSorted: " + isSorted(intArray));

// primitive int array sort test

start = Instant.now();

sort(intArray);

finish = Instant.now();

elapsedTime = ChronoUnit.MICROS.between(start, finish);

System.out.println();

System.out.println("intArray after sorting");

print(intArray);

System.out.println("intArray isSorted: " + isSorted(intArray));

elapsedTime = ChronoUnit.MICROS.between(start, finish);

System.out.println(

"Elapsed time for sorting a primitive array of " + sz + " elements: " + elapsedTime + " ");

} // end of for loop

} // end of main method

// auxiliary method definitions

public static void init(int[] arr, int size) {

Random r = new Random(System.currentTimeMillis());

for (int i = 0; i < size; ++i)

arr[i] = r.nextInt(RAND_MAX); // range 0-32767

}

public static void sort(int[] arr) {

// selection sort, which looks virtually identical in Java and C/C++

int i, j, min, tmp;

for (j = 0; j < arr.length; j++) {

/* assume the min is the first element */

min = j;

/* test against elements after j to find the smallest */

for (i = j + 1; i < arr.length; i++) {

/* if this element is less, then it is the new minimum */

if (arr[i] < arr[min]) {

min = i;

}

}

// swap if we have a new min

if (min != j) {

tmp = arr[j];

arr[j] = arr[min];

arr[min] = tmp;

}

}

} // end of sort( int[] arr ) method

public static boolean isSorted(int[] arr) {

for (int i = 0; i < arr.length - 1; ++i) {

if (arr[i] > arr[i + 1])

return false;

}

// fall-through case

return true;

} // end of isSorted(int[] arr)

public static void print(int[] arr) {

int size = arr.length;

if (size > 10) {

System.out.print(arr[0] + ", " + arr[1] + ", " + arr[2] + " ... ");

System.out.println(arr[size - 3] + ", " + arr[size - 2] + ", " + arr[size - 1]);

} else {

for (int i = 0; i < size; i++)

System.out.print(arr[i] + " ");

System.out.println();

}

}

} // end of class

Explanation / Answer

#include <cmath>
#include <iostream>
#include <ctime>
using namespace std;

void print(int arr[], int size) {

    cout<<"Size is "<<size<<endl;
    if (size > 10) {
        cout<<arr[0]<<", "<<arr[1]<<", "<<arr[2]<<" ... "<<endl;
        cout<<arr[size - 3]<<", "<<arr[size - 2]<<", " + arr[size - 1]<<endl;
    } else {
        for (int i = 0; i < size; i++)
            cout<<arr[i]<<" ";
        cout<<endl;
    }
}

// auxiliary method definitions
void init(int arr[], int size) {
    srand(time(NULL));
    for (int i = 0; i < size; ++i)
        arr[i] = rand(); // range 0-32767
}

void sort(int arr[], int size) {
    // selection sort, which looks virtually identical in Java and C/C++
    int i, j, min, tmp;
    for (j = 0; j < size; j++) {
        // assume the min is the first element
        min = j;
        // test against elements after j to find the smallest
        for (i = j + 1; i < size; i++) {
            // if this element is less, then it is the new minimum
            if (arr[i] < arr[min]) {
                min = i;
            }
        }
        // swap if we have a new min
        if (min != j) {
            tmp = arr[j];
            arr[j] = arr[min];
            arr[min] = tmp;
        }
    }
} // end of sort( int[] arr ) method

bool isSorted(int arr[], int size) {
    for (int i = 0; i < size - 1; ++i) {
        if (arr[i] > arr[i + 1])
        return false;
    }
    // fall-through case
    return true;
} // end of isSorted(int[] arr)

int main() {
    // declare a primitive array to facilitate test runs of various sizes;
    // uncomment the last two for your final test run(s)
    int sizes[] = { 10, 1000, 10000, 100000 /* , 500000, 1000000 */ };
   
    // java.time.Instant is a (potentially) higher-precision timestamp than
    // System.currentTimeMillis();
    clock_t start, finish;
    long elapsedTime;
    // main for loop drives the number of time trials
    for (int sz : sizes) {
        cout<<"Time trial for primitve array "<<sz<<endl;
        cout<<"================================================================="<<endl;
        cout<<"intArray initialization"<<endl;
       
        start = clock();
        int *intArray = new int[sz];
        init(intArray, sz);
        finish = clock();
        elapsedTime = finish - start;
       
        cout<<"Elapsed time for intializing a primitive array of "<<sz<<" elements: " <<elapsedTime<<endl;
        cout<<"intArray before sorting"<<endl;
        print(intArray, sz);
        cout<<"intArray isSorted: "<<isSorted(intArray, sz)<<endl;
       
        // primitive int array sort test
        start = clock();
        sort(intArray, sz);
        finish = clock();
        elapsedTime = finish - start;
       
        cout<<endl<<"intArray after sorting"<<endl;
        print(intArray, sz);
        cout<<"intArray isSorted : " + isSorted(intArray, sz)<<endl;
       
        //elapsedTime = finish - start; this is not required here
        cout<<"Elapsed time for sorting a primitive array of "<<sz<<" elements: "<< elapsedTime<<endl;
    } // end of for loop
} // end of main method

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote