===== forward_listをつかって、hashTableを作ってみよう =====
#include
#include
#include
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::forward_list;
//値 _x がどこのindexに収まるか計算するハッシュ関数
//戻り値: 0~7
int Hash(int _x)
{
return(_x % 8);
}
// データ列 [ 26, 53, 59, 84, 142, 161, 175, 178, 179 ] これをハッシュテーブルに収める
const int datsize = 9;
int dats[datsize] = { 26, 53, 59, 84, 142, 161, 175, 178, 179 };
int main()
{
forward_list hash_t[8];
//教科書では空かどうか判定するために配列を -1 で初期化していた
//hash_t[0] が空かどうか? hash_t[0].empty(): true 空 false データあり(何個かはわからない .size())
for (auto i=0;i::iterator theI; //i
auto theI = hash_t[i].begin();
while (true)
{
if (theI == hash_t[i].end())
break;
else
{
cout << *theI << "→";
theI = std::next(theI);
}
}
}
cout << endl;
//hash_t[i]
}
}
* ハッシュテーブル引くよ
* (入ってるデータにしか効果ないよ)
//ハッシュテーブルはここまでで完成してる
//_keyがハッシュテーブルに有るか、無いか
//ある時は→一発でデータが引けたらそのindexとデータを表示
// 一発で引けなかったらリストの別の床にあるよ(リストの別のところにあるよ)
//ないとき→データがないよ
//cin で読み込んでもいいよ
int key = 150; //これを探します。
int hs = Hash(key); //hsにkeyのハッシュ値
if (hash_t[hs].empty())
{
cout << "値はないよ";
}
else
{
if (hash_t[hs].front() == key)
{
cout << key << "は" << hs << "番のリストにありました";
}
else
{
cout << key << "は" << hs << "番のリストの先頭以外にあります";
}
}
==== sorting Algorithms ====
選択ソート\\
#include
#include
using std::cin; using std::cout; using std::endl;
void printArray(int _dat[], int _num) //配列を全部表示(2桁合わせつき)
{
for (auto i = 0; i < _num; i++)
{
//cout << "data[" << i << "]=>" << _dat[i] << endl;
cout << std::setw(2) << _dat[i] << " ";
}
cout << endl;
}
//選択ソートを実装するよ
void selectionSort(int _dat[], int _num)
{
printArray(_dat, _num);
int min; //最小値
int min_j; //最小値が入ってるindex
for (int comp = 0; comp < _num; comp++) {
min = _dat[comp];
min_j = comp;
for (int j = comp + 1; j < _num; j++)
{
if (_dat[j] < min)
{
min_j = j;
min = _dat[j];
}
}
std::swap(_dat[comp], _dat[min_j]);
printArray(_dat, _num);
}
//⓪comp = 0 , compは整列済みがどこまでか?
// 最小値:min
// 最小値が入ってるindex:min_j
// 初期値を min = _dat[comp]にしておく
//①compから配列を線形探索して最小値を見つける
// comp+1~_num-1まで(_dat[comp+1] ~ _dat[num-1]まで)最小値を探索
// 最小値の入っているindexを min_j = indexに更新しておく indexは最小値が入ってるindex
//②最小値のindex と comp を交換
// swap(dat[comp], dat[index])して配列表示
//③compを1増やす ①に戻る
}
int main()
{
const int datanum = 10;
int data[datanum] = {68,15,89,69,58,67,96,49,9,27 };
selectionSort(data, datanum);
return 0;
}