乱数を配列に作りソートする
-
まず1万個の重なりの無い乱数を作る方法を考えなさい。1万個の配列を作って、そこにただ乱数を入れていくと重なりが出てしまいます。乱数で配列のindexを作りそこにデータを入れていくと、はじめはいいのですが、残り少なくなると、すでにデータが入っている場所ばかり見つけてしまい、プログラムが終わらなくなります。
つぎにバブルソートでソートをしましょう。バブルソートは隣のデータと比較をして大きいものを後ろに移動することを繰り返します。1回配列をなめると一番大きいデータが配列の最後に確定します。次にもう一度なめて確定していないデータをなめて2番目に大きいものを確定します。これを繰り返して全体をソートするやりかたです#include <iostream> #include <cstdlib> using namespace std; const static int MAX_SIZE = 10000; int main() { int data[MAX_SIZE]; int tmp; int j; //初期化 for(int i=0; i<MAX_SIZE; i++) { data[i] = i+1; } //シャッフル std::srand( time(NULL) ); for(int i=0; i<MAX_SIZE; i++) { j = rand() % MAX_SIZE; tmp = data[i]; data[i] = data[j]; data[j] = tmp; } for(int i=0; i<MAX_SIZE; i++) { cout << data[i] << " "; } cout << "\n----------------\n"; //バブルソート for(int i=0; i<MAX_SIZE-1; i++) { for(j=0; j<MAX_SIZE-1-i; j++) { if (data[j] > data[j+1]) { tmp = data[j]; data[j] = data[j+1]; data[j+1] = tmp; } } } for(int i=0; i<MAX_SIZE; i++) { cout << data[i] << " "; } cout << endl; }
重なりの無いデータを作る方法は、一度1から10000まで初期化しておいて、1番目と乱数の場所のデータを入れ替え、2番目と乱数の場所を入れ替えとすべてを入れ替える方法です