配列を使った簡単なソートを関数として作ろうと考えています。
void ArraySort(・・・); という名前で
引数に入れた配列を大きい順にソートしてくれるようにしたいです。
関数化しなければやり方はわかるのですが、
関数化をして尚且つ引数に来る配列の大きさがわからないとなると、
やり方がわかりません。
どのような組み方がいいでしょうか?
わかりにくい質問で申し訳ないです。
配列を使った簡単なソートを関数化
Re:配列を使った簡単なソートを関数化
作ってる途中に気がつきました^^;ここ↓におもいっきりでてました^^;
http://dixq.net/sort.html#1
>関数化をして尚且つ引数に来る配列の大きさがわからないとなると
配列の大きさは,例えばint x[10];であるとすると、
sizeof(x);で配列の大きさが調べられます。
http://dixq.net/sort.html#1
>関数化をして尚且つ引数に来る配列の大きさがわからないとなると
配列の大きさは,例えばint x[10];であるとすると、
sizeof(x);で配列の大きさが調べられます。
Re:配列を使った簡単なソートを関数化
ArraySort関数には配列(のポインタ)さえ渡してしまえば大丈夫だと思います。
配列はポインタで渡すので、別の関数に配列を渡しても、ダイレクトに値を変えることができますね。
なので、関数プロトタイプ宣言では
void ArraySort(int *arr);
または、
void ArraySort(int arr[/url]);
などとすればよいのではないでしょうか。
ちなみに、配列の要素数を知りたいのであればsizeof(配列名)/sizeof(型名)で出来ます。
配列はポインタで渡すので、別の関数に配列を渡しても、ダイレクトに値を変えることができますね。
なので、関数プロトタイプ宣言では
void ArraySort(int *arr);
または、
void ArraySort(int arr[/url]);
などとすればよいのではないでしょうか。
ちなみに、配列の要素数を知りたいのであればsizeof(配列名)/sizeof(型名)で出来ます。
Re:配列を使った簡単なソートを関数化
配列を引数として渡す場合は、その配列の要素数を同時に渡すか、
配列の終端にそれとわかるしるしをつける(文字列の'\0'のようなもの)しかありません。
配列名は引数として渡した時点で、配列の先頭要素へのポインタに読み替えられるので、
関数内で、sizeof(配列名)としても判るのはそのポインタ型の変数の大きさであって、
配列の大きさではありません。
Re:配列を使った簡単なソートを関数化
>とりあえず、ArraySort関数の引数に配列の要素数を追加すればいいのでは?
ですね^^
関数に渡される時点で、格納されている要素数が分からないということはあまりないと思います。
が、
「尚且つ引数に来る配列の大きさがわからないとなると~」
という文が引っかかります。
sortを開始する段階で要素数が確定していないのでしょうか?
ですね^^
関数に渡される時点で、格納されている要素数が分からないということはあまりないと思います。
が、
「尚且つ引数に来る配列の大きさがわからないとなると~」
という文が引っかかります。
sortを開始する段階で要素数が確定していないのでしょうか?
Re:配列を使った簡単なソートを関数化
ふむ、宣言した配列の大きさを調べるのにはsizeof(配列)でいいと思うんですよ。
ttp://ja.wikipedia.org/wiki/Sizeof ←うぃき参照
が、おいらが気になったのは
int arry[100];
が宣言されていたとして、
sizeof(arry)でint型のバイト数×100の数が出るものの、
実際にデータを格納した数ではないんじゃないかな?
と思ったんでさぁ・・・。
要素数100と”多めに”用意しておいて、実際には[35]までしかデータを入れていない場合、
どうでしたっけ?標準入力から手入力させる場合とか?
まあ、入力段階に数をカウントしておけばいいだけなんですが^^;
配列自体があまり大きくなければデータの入っている個数をソート直前に数えても良いけど^^;
ttp://ja.wikipedia.org/wiki/Sizeof ←うぃき参照
が、おいらが気になったのは
int arry[100];
が宣言されていたとして、
sizeof(arry)でint型のバイト数×100の数が出るものの、
実際にデータを格納した数ではないんじゃないかな?
と思ったんでさぁ・・・。
要素数100と”多めに”用意しておいて、実際には[35]までしかデータを入れていない場合、
どうでしたっけ?標準入力から手入力させる場合とか?
まあ、入力段階に数をカウントしておけばいいだけなんですが^^;
配列自体があまり大きくなければデータの入っている個数をソート直前に数えても良いけど^^;
Re:配列を使った簡単なソートを関数化
そうなんですよね。
だけど、トピ主さんの質問の要点がもしかしたらそっちかも?
なんて思っちゃったりしたとかしないとか(どっちだ~!)
ArraySort(配列,要素数);
でいいと思います。
配列を引数に指定した場合、自動的に先頭のポインタ値が渡されるので中身を直接いじれますし。
要素数も、気にならないならば配列の最大要素数(宣言したときの要素数)で良いでしょう。
あとは、ソート自体は組めるということですので、頑張って下さい。
分からなければ・・・
ソートのロジックは管理人さん自信作のクイックソートをばんばん活用すると良いんじゃないかな(笑)
だけど、トピ主さんの質問の要点がもしかしたらそっちかも?
なんて思っちゃったりしたとかしないとか(どっちだ~!)
ArraySort(配列,要素数);
でいいと思います。
配列を引数に指定した場合、自動的に先頭のポインタ値が渡されるので中身を直接いじれますし。
要素数も、気にならないならば配列の最大要素数(宣言したときの要素数)で良いでしょう。
あとは、ソート自体は組めるということですので、頑張って下さい。
分からなければ・・・
ソートのロジックは管理人さん自信作のクイックソートをばんばん活用すると良いんじゃないかな(笑)
Re:配列を使った簡単なソートを関数化
みなさんありがとうございます><
sizeof使えばできましたねw
ここにいる人は説明もわかりやすく親切ですねw
本当にありがとうございます。
sizeof使えばできましたねw
ここにいる人は説明もわかりやすく親切ですねw
本当にありがとうございます。