配列を使った簡単なソートを関数化

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
素人

配列を使った簡単なソートを関数化

#1

投稿記事 by 素人 » 17年前

配列を使った簡単なソートを関数として作ろうと考えています。

void ArraySort(・・・); という名前で

引数に入れた配列を大きい順にソートしてくれるようにしたいです。

関数化しなければやり方はわかるのですが、
関数化をして尚且つ引数に来る配列の大きさがわからないとなると、
やり方がわかりません。

どのような組み方がいいでしょうか?
わかりにくい質問で申し訳ないです。

kazuoni

Re:配列を使った簡単なソートを関数化

#2

投稿記事 by kazuoni » 17年前

作ってる途中に気がつきました^^;ここ↓におもいっきりでてました^^;
http://dixq.net/sort.html#1

>関数化をして尚且つ引数に来る配列の大きさがわからないとなると
配列の大きさは,例えばint x[10];であるとすると、
sizeof(x);で配列の大きさが調べられます。

たまいら

Re:配列を使った簡単なソートを関数化

#3

投稿記事 by たまいら » 17年前

ArraySort関数には配列(のポインタ)さえ渡してしまえば大丈夫だと思います。
配列はポインタで渡すので、別の関数に配列を渡しても、ダイレクトに値を変えることができますね。
なので、関数プロトタイプ宣言では
void ArraySort(int *arr);
または、
void ArraySort(int arr[/url]);
などとすればよいのではないでしょうか。
ちなみに、配列の要素数を知りたいのであればsizeof(配列名)/sizeof(型名)で出来ます。

フリオ

Re:配列を使った簡単なソートを関数化

#4

投稿記事 by フリオ » 17年前

 
 配列を引数として渡す場合は、その配列の要素数を同時に渡すか、
配列の終端にそれとわかるしるしをつける(文字列の'\0'のようなもの)しかありません。

 配列名は引数として渡した時点で、配列の先頭要素へのポインタに読み替えられるので、
関数内で、sizeof(配列名)としても判るのはそのポインタ型の変数の大きさであって、
配列の大きさではありません。
 

バグ

Re:配列を使った簡単なソートを関数化

#5

投稿記事 by バグ » 17年前

とりあえず、ArraySort関数の引数に配列の要素数を追加すればいいのでは?

やそ

Re:配列を使った簡単なソートを関数化

#6

投稿記事 by やそ » 17年前

>とりあえず、ArraySort関数の引数に配列の要素数を追加すればいいのでは?

ですね^^
関数に渡される時点で、格納されている要素数が分からないということはあまりないと思います。
が、
「尚且つ引数に来る配列の大きさがわからないとなると~」
という文が引っかかります。
sortを開始する段階で要素数が確定していないのでしょうか?

バグ

Re:配列を使った簡単なソートを関数化

#7

投稿記事 by バグ » 17年前

>>やそさん
あれ?それはsizeofで調べるという事で解決したのではなかったでしたっけ?(^_^;)

やそ

Re:配列を使った簡単なソートを関数化

#8

投稿記事 by やそ » 17年前

ふむ、宣言した配列の大きさを調べるのにはsizeof(配列)でいいと思うんですよ。
ttp://ja.wikipedia.org/wiki/Sizeof ←うぃき参照

が、おいらが気になったのは
int arry[100];
が宣言されていたとして、
sizeof(arry)でint型のバイト数×100の数が出るものの、
実際にデータを格納した数ではないんじゃないかな?
と思ったんでさぁ・・・。

要素数100と”多めに”用意しておいて、実際には[35]までしかデータを入れていない場合、
どうでしたっけ?標準入力から手入力させる場合とか?
まあ、入力段階に数をカウントしておけばいいだけなんですが^^;
配列自体があまり大きくなければデータの入っている個数をソート直前に数えても良いけど^^;

バグ

Re:配列を使った簡単なソートを関数化

#9

投稿記事 by バグ » 17年前

メモリ内部の管理はプログラマの仕事ですからねぇ…
そこまで考えていたらキリが無いように思いますよ(^_^;)

やそ

Re:配列を使った簡単なソートを関数化

#10

投稿記事 by やそ » 17年前

そうなんですよね。
だけど、トピ主さんの質問の要点がもしかしたらそっちかも?
なんて思っちゃったりしたとかしないとか(どっちだ~!)

ArraySort(配列,要素数);

でいいと思います。
配列を引数に指定した場合、自動的に先頭のポインタ値が渡されるので中身を直接いじれますし。
要素数も、気にならないならば配列の最大要素数(宣言したときの要素数)で良いでしょう。

あとは、ソート自体は組めるということですので、頑張って下さい。
分からなければ・・・
ソートのロジックは管理人さん自信作のクイックソートをばんばん活用すると良いんじゃないかな(笑)

スレ主です

Re:配列を使った簡単なソートを関数化

#11

投稿記事 by スレ主です » 17年前

みなさんありがとうございます><
sizeof使えばできましたねw

ここにいる人は説明もわかりやすく親切ですねw
本当にありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る