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
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.