How can I create an array of random numbers in C++

c++, visual-c++

Solution

#include <random>     // mt19937 and uniform_int_distribution
#include <algorithm>  // generate
#include <vector>     // vector
#include <iterator>   // begin, end, and ostream_iterator
#include <functional> // bind
#include <iostream>   // cout

std::vector<int> create_random_data(int n) {
  std::random_device r;
  std::seed_seq      seed{r(), r(), r(), r(), r(), r(), r(), r()};
  std::mt19937       eng(seed); // a source of random data

  std::uniform_int_distribution<int> dist;
  std::vector<int> v(n);

  generate(begin(v), end(v), bind(dist, eng));
  return v;
}

int main() {
  auto random_data = create_random_data(100000);

  std::cout << "unsorted: ";
  copy(begin(random_data), end(random_data),
       std::ostream_iterator<int>(std::cout, "\n"));
}

`generate` is a generic algorithm that fills a range with values generated by a functor. In this case we provide it with a functor that uses our source of random data to produce random numbers, and we provide a range corresponding to a container, which we can use after `generate` fills it with data.

- `std::generate()`

- `std::uniform_int_distribution`

- `std::mt19937`

We're using `std::mt19937` and `std::uniform_int_distribution`, standard C++ facilities as of C++11 (and available in VS2010), to create random numbers instead of the older `std::rand()` and `std::srand()` because the newer method is easier to use correctly, higher quality and more flexible.

If you're using VS2012 or higher then the C++11 time library is available.

#include <chrono>

int main() {
  using std::chrono::high_resolution_clock;
  using std::chrono::duration_cast;
  using std::chrono::nanoseconds;

  auto start = high_resolution_clock::now();

  // ...

  auto end = high_resolution_clock::now();

  std::cout << duration_cast<nanoseconds>(end - start).count() << "ns\n";
}

- `<chrono>`

Problem

Instead of The ELEMENTS being 25 is there a way to randomly generate a large array of elements....10000, 100000, or even 1000000 elements and then use my insertion sort algorithms. I am trying to have a large array of elements and use insertion sort to put them in order and then also in reverse order. Next I used clock() in the time.h file to figure out the run time of each algorithm. I am trying to test with a large amount of numbers. ``` #define ELEMENTS 25 void insertion_sort(int x[],int length); void insertion_sort_reverse(int x[],int length); int main() { clock_t tStart = clock(); int B[ELEMENTS]={4,2,5,6,1,3,17,14,67,45,32,66,88, 78,69,92,93,21,25,23,71,61,59,60,30}; int x; cout<<"Not Sorted: "<<endl; for(x=0;x<ELEMENTS;x++) cout<<B[x]<<endl; insertion_sort(B,ELEMENTS); cout <<"Sorted Normal: "<<endl; for(x=0;x<ELEMENTS;x++) cout<< B[x] <<endl; insertion_sort_reverse(B,ELEMENTS); cout <<"Sorted Reverse: "<<endl; for(x=0;x<ELEMENTS;x++) cout<< B[x] <<endl; double seconds = clock() / double(CLK_TCK); cout << "This program has been running for " << seconds << " seconds." << endl; system("pause"); return 0; } ```

Original source