• 締切済み

C言語でのソート方法

学校でC言語でのソートをやっていてやりたい事が出来たのですがそれの簡単な方法がわかりません。 内容は「ソート方法をExcelの規定の並べ替え順序」にすることです。 わたしはif文を使ったり、並べ替え順序を配列にいれたりなどしかおもいつきません。 ほかになにかあるのでしょうか?(関数など) 参考:http://office.microsoft.com/assistance/hfws.aspx?AssetID=HP051996691041&CTT=1&Origin=EC010229831041&QueryID=ogP8lDGBO&respos=2

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.4

ソートアルゴリズムは何を使っていますか。Excelのソートは安定(キーが同じ項目の順序は保存される)だったと思うので、qsort(これは不安定)を使うと上手くいかないでしょう。 Cライブラリでは安定なソートアルゴリズムは用意してないと思うので、安定的なソートを自作してください。 挿入ソート(遅いが簡単)かマージソート(速いがメモリ食い)を使うのが良いでしょう。

noname#16765
質問者

補足

もうすこし詳しく書きます。 自作の両方向リストのデータを昇順に並べ替えたり、 新しくいれるデータを適切な位置に挿入などしたいんです。 そのために比較関数などがないでしょうか? ソート方法は挿入ソートを「前回挿入した位置」から検索するようにしたものといったかんじです。 理由はすでに昇順に並んでるデータを手入力する可能性があるかもしれないと思ったためです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

質問の意図がよくわからないのですが、 ソート法は、選択ソートとかを習っていてそれを使うんですかね?とすると、 ソートする関数で A[i] < A[j] とかなっている所を、自分で書いた smaller(x, y) みたいなもので置き換えるとよいのでは。これは、はじめは、< と同じ機能を持つものを作ってテストして、それから改良していくといいでしょう。 配列要素は共用体ですか? データが、数なら < で判定して、文字列なら、文字列の比較をするんでしょう。

noname#16765
質問者

補足

すみません。説明が下手過ぎました。 私が聞きたかったことはソートをするために、「strcmp」と似た関数で「Excel」と同じソート方法になるように大小判定ができるものがないかということです。 ちなみにsmaller(x, y)みたいなものをstrcmpに文字列が数字の場合の処理を付け足したものなら作っています。 しかしそれではExcelにあるようなソート方法にはならなかった(当然ですが)ので既にある関数でできないものかと思い書き込みました。 もしあったなら教えてくれたら助かります。 なかったなら諦めて自作しようと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • macchun
  • ベストアンサー率50% (3/6)
回答No.2

qsort() で並べ替えができます。 参考 URL にサンプルがありますのでよく読んでみてください。

参考URL:
http://www.microsoft.com/japan/developer/library/vccore/_crt_qsort.htm
全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

qsort関数を使うとソートできますが、 その時の比較関数を望むように書いてやることでできるかもしれません。 ただ、Cの場合数値と文字がごっちゃになった配列というのはかなりハードルが高くなるような気がします。 文字列のポインタの配列にしておいて、数値として比較とかのオプションをつけるとか・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelで就業時間の算出が上手くできない

    Excelで就業時間の算出をしようと思いヘルプを見ながらやっていたのですが http://office.microsoft.com/training/Training.aspx?AssetID=RP060796741041&CTT=6&Origin=RC060796661041 ↑ここに書かれている通りに計算したのですが、何回やっても合計が「0:00」になってしまいます。 「*24」を入力せずに計算したらちゃんと合計が出るのですが、そのサイトのように「9」と合計が出るのではなく「9:00」と出ます。 あっているのか間違っているのかよく分かりません。 あとその次の段階の『休憩を除いた就業時間を算出する』もなのですが http://office.microsoft.com/training/Training.aspx?AssetID=RP060796751041&CTT=6&Origin=RC060796661041 説明の通りに入力して計算したのですが「8.25」ではなく「6:00」と出ます。 合計がコンマではなくコロンで表示されるのも謎です。 何がいけないのか全くわかりません。 どなたかご教授よろしくお願いいたします。

  • C言語の問題

    C言語を勉強している初心者です。大学の課題なのですが、よくわかりません。 5人分の名前と点数を入力し、点数の良い順に並べ替えよ。並べ替えの部分には関数(配列またはポインタ)を使用すること。 点数を入力させるのは分かるのですが、同時に名前の文字列を入力させるのがわかりません。 ソートも名前と点数を同時に並べ替えるやり方がわかりません。 宜しくお願いします。何分、初心者なので…申し訳ありません。宜しくお願いします。

  • 二次元配列でソートがしたい

    二次元配列でソートがしたい 二次元配列でソートがしたい 開発環境:Visual Web Developer 2008 express 言語:Visual Basic 上記開発環境でWebアプリケーションを開発中です。 TextBoxを縦20行横10列の表形式に配置し、左から2番目の列に入力された数値をキーに、昇順に並べ替えができるような入力フォームを作成していますが、参考になるようなサイトが見つからなかったので、どなたか参考になるサイトやサンプルロジックを教えて頂けないでしょうか? よろしくお願いします。

  • 何が違うのでしょうか?

    Excel 関数 (機能別) - Excel - Office.com http://office.microsoft.com/ja-jp/excel-help/HP010342656.aspx?CTT=1 と ワークシート関数一覧 (機能別) - Excel - Office.com http://office.microsoft.com/ja-jp/excel-help/HP010079186.aspx?CTT=1 は何が違うのでしょうか? エクセルのワークシート上で使える関数の一覧が見たいのですが どちらでしょうか?

  • 配列をソートさせたとき、もう一方の配列も同じようにソートさせたい

    タイトルが意味不明で申し訳ありません。 二つの配列があるとします。 片方には文字列、もう片方には数値が記録されているもので、最大添え字は同じです。 この数値の大きい順に並べ替えを行いたいのですが、 name[0]とcount[0] name[1]とcount[1] ・ ・ をペアで並べ替えたいのですが、その方法が分かりません。 sort関数を使うとどうしても片方のみしかソートできないし、バブルソートを用いて試みましたが、どうも並び替えられません。 連想配列を使う考えもありましたが、2つの配列をどうやって一つのハッシュに格納すればいいか分からず断念しました。 バブルソートの方にバグがあるのかもしれませんが、何か方法があればご教授いただけると幸いです。 よろしくお願いします。 バブルソート部分のソース(配列は@filelistと@countを使用) # ソート処理 for($i=0;$i<$#filelist;$i++){ for($j=0;$i<$j;$j++){ if($count[$i]<$count[$i+1]){ $tmp=$count[$i]; $count[$i]=$count[$i+1]; $count[$i+1]=$tmp; $tmp=$filelist[$i]; $filelist[$i]=$filelist[$i+1]; $filelist[$i+1]=$tmp; $k=$j; } $i=$k; } }

    • ベストアンサー
    • Perl
  • 配列のソートがしたい

    sort関数等調べたのですがうまくできません。 やりたいことは http://q.hatena.ne.jp/1155090363 ↑で見つけた事とそっくりなのですが・・・。 ------------------------------------------- arrItem[n] という配列の一つの要素の中に、 タブで区切られた10個程のデータが入っています。 arrItem[0] = "5 ^ 店名5 ^ 品名5 ^ 価格5 ^ 割引額5 ^・・・^ 備考5" arrItem[1] = "2 ^ 店名2 ^ 品名2 ^ 価格2 ^ 割引額2 ^・・・^ 備考2" arrItem[2] = "11 ^ 店名9 ^ 品名9 ^ 価格9 ^ 割引額9 ^・・・^ 備考9" 一列目はSEQ番号でユニークですが、順番が並んでいません。 この配列をSEQ番号で並べ替えたいのですが、 sortだと文字列比較のためか桁数の違う数字の並べ替えが 上手くできません。数値としてのソート方法 が分かる方いらっしゃいましたらご教授願います。 もし可能なら、1列目を数値降順にしたり昇順にしたり、 また2列目を五十音順にソートしたり、 また4列目を価格の安い順にソートしたり と応用も可能ならばご教授願いたいです。 宜しくお願い致します。

  • VB6での配列の SORT の使い方 

     お世話になります。   下記のように、配列にランダムな数値を入れて、それを昇順、降順にしたいのですが、この場合の SORT の使い方を教えて欲しいです。  Dim YUI(100) As Integer   YUI(1) =88:YUI(2) =53:YUI(3) =7 ~ YUI(98) =13:YUI(99) =2:YUI(100) =94 下記のような並べ替えをしていますが、SORT を使った場合の書き方を教えて下さい。 Dim I1,I4,D7 As Integer For I1 = 1 To 100 - 1 For I4 = I1 + 1 To 100 If YUI(I1) < YUI(I4) Then D7 = YUI(I4) YUI(I4) = YUI(I1) YUI(I1) = D7 End If Next I4 Next I1

  • 【JavaScript配列のソート】2つのキーで

    JavaScriptのsort()を使用して次の並べ替えをしたいと思っています。 key1, key2, data, data 5/5 , 5/4 , リンゴ, 110 5/3 , 5/6 , バナナ, 130 5/7 , 5/2 , ミカン, 110 5/3 , 5/2 , イチゴ, 150 この配列をkey1を昇順でかつkey2も昇順とし並び変えたいのです。 key1, key2, data, data 5/3 , 5/2 , イチゴ, 150 5/3 , 5/6 , バナナ, 130 5/5 , 5/4 , リンゴ, 110 5/7 , 5/2 , ミカン, 110 str.sort(); これだとkey1のみでソートされてしまいますので、条件を複数指定したいのですがいい方法はないでしょうか? 結果はweb(テーブル等)に表示するのではなく、配列変数のままで獲得したいと思っています。 google apps のスプレッドシート内でスクリプトとして使用したいと思っています。 かなり調べたのですがどれも1項目(key1)のみの検索しかヒットしませんでした。 よろしくお願いします。

  • クリップアートのダウンロードがうまくいきません

    OS:Win2000、ブラウザ:IE6、Word2000を使用しています。(全て最新版にアップデート済み/ブロードバンド接続) Office Online(http://office.microsoft.com/clipart/default.aspx?CTT=6&Origin=EC790020111041)からクリップアートをダウンロードしたいのですが、指示に従って操作をすると「サービスは、一時的にご利用いただけません。 現在、このダウンロード処理を完了できません。ご不便をおかけして申し訳ありません。後でもう一度試してください。」と表示されてしまい、ダウンロードできません。 先週から何度も試してみていますが、すべて同じ結果になります。 それに全てがダウンロードできないというわけではなく、できるものとできないものが混在している状態です。 以下が、できるものとできないものの一例です。 × j0189244.gif(工事中のgifアニメーション) × TN01189_.wmf(工事中のクリップアート) ○ j0228363.wmf(太陽のクリップアート) 解決方法をご存じの方、よろしくお願い致します。

  • ツール→アドイン→郵便番号ウィザードが表示されない

    上記のとおりです。 人名・地名変換で郵便番号が表示されないものがあるので、アップデートしたいと思っています。 http://office.microsoft.com/ja-jp/results.aspx?Scope=DC&Query=%E9%83%B5%E4%BE%BF%E7%95%AA%E5%8F%B7&Origin=EC01033 からダウンロードし、開いたのにエクセルには反映されません。(アドインできないんだから当然かもしれませんが。)郵便番号ウィザードが表示されるにはどうすればよいのでしょうか? 使っているのは Office XP です。 http://support.microsoft.com/default.aspx?scid=kb;ja;418096 を参照したのですが、私の場合はどこを修正すれば良いのか、わかりません。 よろしくお願いします。

このQ&Aのポイント
  • Windows11のスタート時画面の中央に一瞬表示されるアプリの原因が分からない。
  • Windows11のスタート画面で一瞬表示されるアプリについての質問。
  • Windows11のスタート時画面に一瞬表示されるアプリの原因が知りたい。
回答を見る

専門家に質問してみよう