ソートについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sato
記事: 12
登録日時: 12年前

ソートについて

#1

投稿記事 by sato » 12年前

最近プログラミングコンテストに参加しようと勉強を始めたのですが、ソートについて分からないことがあります。
ソートについて調べていると、配列などに入っている値をソートするというプログラムはよくあるのですが、ほかの値も一緒に並べ替えるにはどうしたらよいのでしょうか。
たとえば、テストの点数から成績順に学籍番号を並べ替えたいなどの場合です。

言語はC/C++でお願いします。ただ、STLについてはまだまだ未熟なので難しいことは全くわかりません。よろしくお願いします。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: ソートについて

#2

投稿記事 by usao » 12年前

>たとえば、テストの点数から成績順に学籍番号を並べ替えたいなどの場合です。

コード:

struct StudentData
{
  int TestScore;  //テストの点
  int StudentID;  //学籍番号
};
のようなデータの配列を作ってソートすればどうでしょうか.
もし,↓のようにデータを持っているとしたら…

コード:

const int N = 10;
int TestScore[N] = { ... };
int StudentID[N] = { ... };
ソート処理により動かすものをTestScore[]等のデータそのものではなく 配列のindex値にする とかすればよいのではないでしょうか.

sato
記事: 12
登録日時: 12年前

Re: ソートについて

#3

投稿記事 by sato » 12年前

やや言葉足らずだったようで申し訳ありません。できればソートアルゴリズムは自分で実装せずに他のライブラリから呼び出して使いたいと考えているのですが、その方法がわかりません。自分で書こうとしても、高速なアルゴリズムにするには時間がかかってしまうので、あまり現実的ではない気がします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ソートについて

#4

投稿記事 by みけCAT » 12年前

構造体にデータを入れて、qsort関数(stdlib.h)を使うといいと思います。
ググってみてください。
[search=google]qsort 構造体[/search]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: ソートについて

#5

投稿記事 by usao » 12年前

sato さんが書きました:やや言葉足らずだったようで申し訳ありません。できればソートアルゴリズムは自分で実装せずに他のライブラリから呼び出して使いたいと考えているのですが、その方法がわかりません。自分で書こうとしても、高速なアルゴリズムにするには時間がかかってしまうので、あまり現実的ではない気がします。
処理方針(?)を示しただけです.
ソートアルゴリズム部分は std::sort なりなんなりを使えばよいのではないでしょうか.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: ソートについて

#6

投稿記事 by softya(ソフト屋) » 12年前

闇雲にソートしても効率が良いかは分からないので知識が必要です。
100件程度のデータにクイックソートは逆に遅いです。
「ソート時間の比較」
http://www.ics.kagoshima-u.ac.jp/~fuchi ... mpare.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

sato
記事: 12
登録日時: 12年前

Re: ソートについて

#7

投稿記事 by sato » 12年前

>> みけCAT様
qsort関数というのは知りませんでした。構造体をこんな簡単にソートできるという関数があるとは。ぜひ使ってみます。

>>usao様
std::sortも考えたのですが、質問のような処理をすることができるのかすら分かりませんでした。STLについてはまだ未知の領域なのでこれから開拓していきたいと思います。

>>softya様
少ないデータ数ではクイックソートもずいぶん遅いですね。逆に単純なバブルソートがそこそこの速度を出すというのは不思議です。参考にさせていただきます。


皆様回答ありがとうございました。

閉鎖

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