ソートのアルゴリズム

1デフォルトの名無しさん
2つの値を比較した時に同じだった場合、元の順序を壊さない
ソートのアルゴリズムでバブルソートよりも高速なソートって
ありましたっけ?どなたか教えてください。
宜しくお願いします。

2デフォルトの名無しさん:2000/12/29(金) 19:54
バブルソートよりっておい!

クイックソートの比較関数に元の順序も比較対象にすれば?

はい終わり。
3デフォルトの名無しさん:2000/12/29(金) 19:58
冬休みのレポートか。
4デフォルトの名無しさん:2000/12/29(金) 21:06
ええかげんにせい・・・
5sage:2000/12/29(金) 22:07
我々は1が何故このようなスレッドを立てたのかという疑問を解決するため、
1の故郷に向かった。まだ日本にこんなところがあったのか…
思わず口に出てしまった言葉を同行した友人に失礼だと咎められた。
小人が住むような小さな家、ツギハギだらけの服を着る農夫たち、そして
彼らは余所者で身なりのいい我々を監視する様に見詰めている。
高度成長だの、神武景気だの、ワールドカップだので浮かれていた我々は改めて
農村の現状を噛み締めていた。ボロ屑のような家に居たのは老いた母親一人
我々を見るなり全てを悟ったのか、涙ながらに息子が申し訳ありませんと
我々に何度も土下座して詫びた。我々はこの時初めて1を許そうと思った。
誰が悪い訳ではない、農村の貧しさが全て悪かったのだ。我々は1の母親から
買った干し柿を手に、打ちひしがれながら帰路についた

6デフォルトの名無しさん:2000/12/29(金) 22:30
マージソートならO(nlogn)だ。
2~5は、ソートの安定・非安定について勉強すること。
72~5:2000/12/29(金) 22:35
>>ソートの安定・非安定

ようするに
>>2つの値を比較した時に同じだった場合、元の順序を壊さない
だろ?
8:2000/12/29(金) 23:30
んなこったあ、わかってんだよ。
クイックソートは非安定だ。
けど、ソート以前の順序を、比較関数に適応することことで
結果的に安定になるの。
9デフォルトの名無しさん:2000/12/30(土) 00:24
>2
「元の順序も比較対象にする」と
「2つの値を比較した時に同じ」ではなくなってしまいます
かってに条件を変更しないでください。
10デフォルトの名無しさん:2000/12/30(土) 00:28
>>8=2
qsortとかのライブラリで、交換をどう制御するんだ?
馬鹿?
11デフォルトの名無しさん:2000/12/30(土) 00:56
>9,10
だめだこいつら...
12>11:2000/12/30(土) 01:05
どうダメなのか説明してみ
ダメだけ言って逃げるなよ
13デフォルトの名無しさん:2000/12/30(土) 01:06
>11=8=2なら、詳しく説明しろ。
14名無しさん@お腹いっぱい。:2000/12/30(土) 01:10
>>12-13
ホント馬鹿だな(藁
15デフォルトの名無しさん:2000/12/30(土) 01:19
お、逃げたな。
結局答えられないだけだろ(ワラ
「馬鹿」しか書けんならさっさと逃げて消えろや
16デフォルトの名無しさん:2000/12/30(土) 01:21
2じゃないけど。

二つの値が同じだった時だけ
順序を比較するんでしょ? >>12=13

説明しろとかいう前に自分の頭で考えたら?
あ、考えてもわからなかったんだー(藁

17デフォルトの名無しさん:2000/12/30(土) 01:23
>>14=11=8=2
ふぁあーあ、消防相手にしてたのか。もう寝るわ。
んじゃ、2の反省文は宿題にしておく。今日の朝までに提出する事。いいな?>2
18デフォルトの名無しさん:2000/12/30(土) 01:26
>>16
どうせ想像だけで検証なんかしてないんだろ。
そんな単純な考え方じゃだめなんだって!
もっと良く考えてみ?
19デフォルトの名無しさん:2000/12/30(土) 01:39
>17 あーあ、もう引っ込みつかないね。かわいそ。
一晩寝て、頭スッキリさせてから、出直しておいで。
201=2:2000/12/30(土) 01:48
ただの中傷合戦になってきたので
========終了========
21デフォルトの名無しさん:2000/12/30(土) 01:57
おいおい勝手に終らすなよ。>20=2
全然中傷じゃないって。2も理解してない様だし。
22デフォルトの名無しさん:2000/12/30(土) 02:00
>>21
多分、理解していないのはあなただけです。
23だから1=2だって:2000/12/30(土) 02:02
========終了========
24デフォルトの名無しさん:2000/12/30(土) 02:02
オイオイ、1が知りたいのはバブルソートより高速なソートだろ?
だったら、マージソートでもクイックソートでも良いじゃねーか。
25デフォルトの名無しさん:2000/12/30(土) 02:02
>2
まだわかってないのか?
アホ相手は疲れるね。

同じ値の比較だけならば、交換は行われないので、入れ替わる事はない。が、
比較で異なった時に行われる要素の交換で、同じ値が入れ替わらない保障が無いのが「安定しないソート」。
そもそも同じ値かどうかはソートが完了するまで判明しないので2の考えには無理がある。
反省文は朝までに各自提出する事!
26デフォルトの名無しさん:2000/12/30(土) 02:08
>24,25
だめだこいつら...
27名無しさん@お腹いっぱい。:2000/12/30(土) 02:11
全員馬鹿。
クイックソートした後にソート前の順番(インデックスを参照して)でバブルソートするのが一番効率的だ。
同じ文字の確立なんて低いだろ?
マージなんか使うな低脳!
お前等全員リストラだ!!
28>26:2000/12/30(土) 02:12
26及びその部類達は答えが欲しいがために挑発をつづける厨房です
反応してはいけません
29sage:2000/12/30(土) 02:13
>比較で異なった時に行われる要素の交換で、同じ値が入れ替わらない保障..
ニッポンゴ ムツカシーネ
30デフォルトの名無しさん:2000/12/30(土) 02:14
>同じ文字の確立なんて低いだろ?
勝手に決めるな
31名無しさん@お腹いっぱい。:2000/12/30(土) 02:16
>29
マジ馬鹿発見!
煽ったつもりだろうが自分の低脳振りをアピールしただけだぞ。
真性厨房だろ(藁
32デフォルトの名無しさん:2000/12/30(土) 02:17
>25
君もういいよ。お布団へお入り。
3324:2000/12/30(土) 02:17
>26
理由書けよ。
34このスレは:2000/12/30(土) 02:20
フィーバーしてます。
35デフォルトの名無しさん:2000/12/30(土) 02:22
フィーバーと言うよりエゴのぶつかり合い。
VB vs Delphiと余りかわらん。
36デフォルトの名無しさん:2000/12/30(土) 02:24
stable sortの意味が分かっていない人間と
stable sortでなくても順序付けにindexを含めれば同等に処理できるという人間と
バカなやり取りをしていることが分かってて煽ってる人間と、
なにが間違ってるのか分からないもののとりあえず煽ってる人間が、
入り乱れております。
37デフォルトの名無しさん:2000/12/30(土) 02:25
期待age
38デフォルトの名無しさん:2000/12/30(土) 02:27
あげてないずぁん
39>37:2000/12/30(土) 02:29
いい感じ
40名無しさん@お腹いっぱい。:2000/12/30(土) 02:31
1のソートの対象になるデータ次第だろ?
結局ソートなんてデータ次第なんだよ。
データ(ソートに必要な回数)によって最適なアルゴリズムは変わるだろ?
もう終わりにしようぜ!
お前等全員ミレニアムの年末に彼女がいなくて一人で淋しくインターネットしてる3流私立大学のメガネでぶのコンピュータオタクなんだろ。
こんなお互いを中傷し合う事で淋しさを紛らわすなんて子ども地味たこと辞めようぜ。
さっさと回線切ってAVでも借りてきて一発抜いて寝ろよ!
明日はきっと今日よりも最悪な日。
その次の日も、またその次の日も・・・
そうやって1人でどんどん不幸になっていって最後にはバットを振り回して怪我人出して逮捕されてムショでケツ掘られてアンアンの毎日だ。
お前等の人生最高だな。
超かっこいいよ!
41森総理:2000/12/30(土) 02:33
日本のIT産業の未来は明るい。
42デフォルトの名無しさん:2000/12/30(土) 02:34
>40
良く言った
あんたはエライ
43ダブルフォルトの名無しさん:2000/12/30(土) 02:36
いくつか用意してランダムで決める(藁
44デフォルトの名無しさん:2000/12/30(土) 02:36
なーんだ。もう終わりか。もっとバカ同士ののしりあえば面白いのに。
ねよねよ。
45デフォルトの名無しさん:2000/12/30(土) 02:39
1のデータが数十件だったらお前ら報われねーな>ALL
46デフォルトの名無しさん:2000/12/30(土) 03:04
だから冬休みの宿題だってば。
47?f?t?H???g???????:2000/12/30(土) 03:13
と、落ち着いたところで私には
25 のいってることがよくわからないんですけど、
誰か説明してくれません?

48デフォルトの名無しさん:2000/12/30(土) 03:14
あれ、名前に勝手にわけのわからんのがはいっちゃった。
49???????????????B:2000/12/30(土) 04:41
> 2つの値を比較した時に同じだった場合、元の順序を壊さない
そもそも、こういうソートってたとえばどういうときに必要なの?
50デフォルトの名無しさん:2000/12/30(土) 06:42
ソート済みのリスト複数を結合とか?
とりあえず1は頭の良い奴ではないので細かなツッコミはよそう。
いじめ(悪い)
5149:2000/12/30(土) 06:54
>>50
>ソート済みのリスト複数を結合とか?
その前提として、要素全体が評価対象じゃなくて、
要素の一部が評価対象である、と言ってる?
たとえば Yamada Taro,Japan,24,Male てな
個人データ群を年齢をキーとしてソートとか?
52デフォルトの名無しさん:2000/12/30(土) 10:44
それにしても
25の言ってる「同じ値」ってどういう意味なのかが
わかりません。
53デフォルトの名無しさん:2000/12/30(土) 10:50
ちょっと話題がずれるが
basicでswap命令が消えたのはいつだったか
あの時、私はその理由がわからずおおいに戸惑ったものだ。
あれはまさしく退化ではないか…<笑>
542=8:2000/12/30(土) 11:19
比較結果が同じ場合に、元の並び順で大小を決めればいいかと思いつきで書きましたが
よくよく考えたら、無理ですね。
鬱だ、21世紀を目前に回線切って首つります。
板橋あたりで自殺のニュースがあったらそれは私です。

ちなみに2,8以外は自分ではありません。
みなさんよい新世紀を。
55デフォルトの名無しさん:2000/12/30(土) 11:33
つまらんな。
もっとソートについて熱く語ってくれよ。age
56>55:2000/12/30(土) 11:40
じゃあスレ作り直したら? 1の内容じゃネタスレにしかならんsage
57名無しさん@お腹いっぱい。:2000/12/30(土) 12:34
珠玉のプログラミングにのってたbitsortにはびびった。

http://www.programmingpearls.com/
http://www.programmingpearls.com/code.html

つーか、勉強不足なだけか・・・。
58名前ついてますか?:2000/12/30(土) 13:35
ああ、あの本は買わなきゃ、ってかんじだよねえ。
でもすでにいっぱいキューにたまってるからなあ...
#amazon.co.jpが送料無料のうちに英語版買うかな..
59名無しさん@LV5:2000/12/30(土) 20:59
誰かここにくいっくそ-とのそ-す書いて下さい
60デフォルトの名無しさん:2000/12/30(土) 21:05
index付shell sortにしとけ
61考えました。これはいけるかもしれません。:2000/12/30(土) 21:38
そーと(文字列){
  文字列を並べる
  天才チンパンジーに見せて並べ替えをさせる
  値を返す
}
そーと(文字列){
  文字列を水槽に落とす //浮力の小さい順に沈んでいく
  出来た層を返す
}
そーと(文字列){
  文字列にマラソンをさせる //いつのまにか足の速い順になっている
  順位順に校舎に戻ってよし
  }
64デフォルトの名無しさん:2000/12/31(日) 01:14
総統も相当ソートが(以下略)
65デフォルトの名無しさん:2001/02/04(日) 17:59
去年ぐらいに出たアルゴリズムの入門書で、ソートの解説が「シェルソートまで」
つーすごい本なかったっけ?「クイックソート」のクの字もなかったやつ。
66デフォルトの名無しさん:2001/02/06(火) 12:30
2のいうとおりにやればOKだよ
qsort関数使えや

理解できないなら勉強せいや
67デフォルトの名無しさん:2001/02/06(火) 12:33
>>63
途中で近道してた奴が3人もいました。
68デフォルトの名無しさん:2001/02/06(火) 12:40
値が同じ時は元の順番を優先させてのクイックソートを使えや
69デフォルトの名無しさん:2001/02/06(火) 13:01
>>68
クイックソートって「あるデータだと」
かなり遅いアルゴリズムって知ってる?
7068:2001/02/06(火) 13:14
情報1種の過去問であったよな
当然知ってるよ
71デフォルトの名無しさん:2001/02/06(火) 13:17
クイックソート(文字列 s){
文字 a = 真中頃にある文字を見つける(s);
 do{
  int n1=先頭からaより大きな文字を探させる
  int n2=後ろからaより小さなな文字を探させる
  s->交換(n1,n2);
 }while(先頭からの検索点<=後ろからの検索点)
n=文字aの位置
クイックソート(文字列の先頭からnまで);
クイックソート(文字列のn番目から最後まで);

}

72デフォルトの名無しさん:2001/02/06(火) 14:12
>>68
あ。
安定な整列を行なう関数をわざわざ自作していたよ…。
鬱出汁膿
73デフォルトの名無しさん:2001/02/06(火) 15:18
で、pegionhole sortがquick、mergeより速いってホント?
74SAGE:2001/02/06(火) 15:33
>>73

そりゃビンソートとか基数ソートと同じで O( n ) だから、
使える状況なら速いだろうけど。
75デフォルトの名無しさん:2001/02/06(火) 15:55
>>72
だから、>>72にあるようにクイックソートだと前からと後ろから
検索して交換という手順があるから、 元の順番を優先させるには
元の順番のフィールドをデータ構造に含んでいなければいけない。
76デフォルトの名無しさん:2001/02/06(火) 18:02
ニホンゴムツカシイネ
77デフォルトの名無しさん:2001/02/06(火) 19:18
qsort関数の条件判定の関数に値が等しければ
元の順番を使って比較するように
いじれば終わり

それか
ビンソートなりマージソートでもいいよ
78353:2001/02/06(火) 19:56
バカか?
選択した境界値が複数存在した場合どうするんだよ。
79デフォルトの名無しさん:2001/02/06(火) 19:59
>>77
配列の時はいいけどリンクリストのときはどうするよ
データの要素に元の位置の情報がなきゃお手上げでしょ。
配列の場合は「インデックス」っていう暗黙の情報を
比較条件に使うことができるってだけじゃん
80デフォルトの名無しさん:2001/02/06(火) 20:13
同じ値があれば
各々のポインタをつたってって位置情報を割り出し
元の順序を比較条件に追加だよ
81デフォルトの名無しさん:2001/02/06(火) 20:37
>データの要素に元の位置の情報がなきゃお手上げでしょ。
ソートするってことは並んでる順番をかえることだよ
元の並んでる順番の情報がないわけないじゃん
8279:2001/02/06(火) 21:31
>>80各々のポインタをつたってって位置情報を割り出し
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>81
>>データの要素に元の位置の情報がなきゃお手上げでしょ。
>ソートするってことは並んでる順番をかえることだよ
>元の並んでる順番の情報がないわけないじゃん

ごめん、「お手上げ」っていうのは撤回する。
ただリストの場合その「順番の情報」を取得するのにえらくコストが
かかるって言いたかったのよ。
そんなコストかけるくらいならqsortなんか使わずに他のO(NlogN)の
安定なアルゴリズム使った方がマシって思ったのさ。
確かにやりようによってはリストでも安定なqsortできるかもしれないけど
変な小細工して遅くなるようなら意味ないし
83デフォルトの名無しさん:2001/02/06(火) 21:44
>>27
なぜマージはいけないの?
84>79:2001/02/06(火) 22:13
確かにそうだな
安定で最速なソートとなると
考えてソート法を選ぶしかないな

あんたなかなかやるな
プログラム系のホームページを持ってたら教えて下さいな
85デフォルトの名無しさん:2001/02/06(火) 23:03
qsortも遅くならないように普通は改良されてるから、
何も考えずにqsortでいいんじゃないか?
それはまずいの?
86>85:2001/02/06(火) 23:16
ただのqsortじゃ安定しないの
8785:2001/02/06(火) 23:20
>>86
だから、不安定にならないように色々工夫されてるんじゃないの?
組み込みの関数なんかは特に。
88SAGE:2001/02/06(火) 23:26
>>87
わざわざ安定なソートになるように変形してあるqsortの実装は
見たことないぞ、俺。組み込みがどうとかは知らんけど。
89デフォルトの名無しさん:2001/02/06(火) 23:27
>>87
stable sortの意味が分かって書いてるのか?
最悪なケースをなるべく生み出さないようなpivotの選出法とか、
数が少ないときはbubble sortに切り替えるだとかいったテクニックは
色々使われていると想定できるが、それはソートが「安定」かどうか
とは全く次元の違う話だぜ。
90デフォルトの名無しさん:2001/02/06(火) 23:43
みんないやらしいね。ところでホントに何でマージソートはいけないの?>>27
9183:2001/02/06(火) 23:49
記憶領域を大量に使う(150%)ことを覗けばqsortより優秀だと思ってるんだが。
あと、
pegionhole sortとビンソートってのもわからん。
ダメだな、俺。
[分布数え|radix|マージ|挿入]ソートしか使わないもん。
9227はバカじゃんか:2001/02/06(火) 23:52
クイックソートした後にソート前の順番(インデックスを参照して)でバブルソートするのが一番効率的だ。
同じ文字の確立なんて低いだろ?

一番効率的とゆっときながらバブルソートを使うのが理解不能
9379:2001/02/07(水) 00:14
>>84
だいぶ前に勢いあまってソース公開スレに自推したことあるけど
恥ずかしいからヒミツ
94デフォルトの名無しさん:2001/02/07(水) 00:25
>>85
Cの標準ライブラリのqsort仕様だと元の順序は保証されてないな
でも扱うのは配列だから比較のときに位置情報は使えるな
95名無しさん@お腹いっぱい。:2001/02/07(水) 00:37
>>92
ソート前の順番を保持してqsortかけるなら、それもソートキーに
含めてqsortすれば安定するやんけ。
なんでわざわざ最後にバブルソートかけるんだ?
恥ずかしい奴。
96!92:2001/02/07(水) 01:01
>>95
全部読め。
アレは引用だ
9785:2001/02/07(水) 01:24
>>89
だから、そういう工夫された方法を使ったqsortを使ってれば、
実用上問題じゃないんじゃないの?
しかも、C言語とかにはじめからついてる関数はそうだから
何も問題ないんじゃないの?ってこと。
自分で変なqsortを書かない限りね。
間違ってる?
98デフォルトの名無しさん:2001/02/07(水) 01:30
>77
>qsort関数の条件判定の関数に値が等しければ
>元の順番を使って比較するように
>いじれば終わり
元の順番を使うって、キーの配列まるまるコピーしておいとくの??
再帰の底で全部が同じキーの値になった場合に、その部分だけのソート
用のキーとして、元の並びの添え字を保持しておき、それを使うって意味
だよね。キーがほとんど重なってないときはメモリがもったいないよ・・


99デフォルトの名無しさん:2001/02/07(水) 01:34
だれかマージソートがダメな理由を教えてくれ~
O(nlogn)でデータの選り好みをしないし、qsortなんかより
よっぽどいいと思うんだが?

記憶領域なんて256もつんでおけばたいてい問題ないだろ?
100デフォルトの名無しさん:2001/02/07(水) 01:35
qsortってCの単なるライブラリ関数であってquick sortの事を
一般的にqsortって言ってるわけではないはずなのに、
みんなqsortと省略するのはなんかねぇ・・
101デフォルトの名無しさん:2001/02/07(水) 01:40
>99
>記憶領域なんて256
学生なんですが、定数なんてソースに埋めるもんなんですか??
102デフォルトの名無しさん:2001/02/07(水) 01:44
>>101
意味不明
>>99
運悪いとページングがおきる可能性がある。そんなに気にすることもないかも知れんが
103デフォルトの名無しさん:2001/02/07(水) 02:59
すまん。256はPCの搭載メモリが256Mってことだ。

>運悪いとページングがおきる可能性がある。
なるほど。そんなコアなところまで気が回らなかった。
104SAGE:2001/02/07(水) 07:54
>>97
だから、「C言語とかにはじめからついてるqsort」は安定じゃねぇってばさ。

>>99
普通のデータだと n log n の係数がでかいせいでクイックソートより遅い。
27みたいな余計なことやってると別のような気もしないでもないが。
105デフォルトの名無しさん:2001/02/07(水) 08:16
>85
「遅くなる・ならない」と「安定・不安定」は全く別の話ですよ。

ちなみに関係ないけど VC++ の qsort は
 ・最初と真ん中と最後の値の中央値をピボットにする。
 ・サイズ8以下なら挿入ソート
でした。
10668:2001/02/07(水) 08:24
>再帰の底で全部が同じキーの値になった場合に、その部分だけのソート
>用のキーとして、元の並びの添え字を保持しておき、それを使うって意味
>だよね。

qsortの比較関数
で2つの値が等しいときはその時の位置情報を使う
元の並びはいらないよ
107デフォルトの名無しさん:2001/02/07(水) 08:30
工夫されたquick sortでソートした後にバブルソートがベスト。
工夫されたとはpivot選択時にskew checkを行なっていたり、
要素数がある程度以下になった時にはバブルなどに切り替えるソート。

compound keyを用いたquick sortでも良いがkey comparisonの負荷
が増加する点から考えて次点とす。
一つ目の順序が分からない云々言っている奴がいるが、
一つ目のソートができているという事はそのためのkeyは参照という意味である。
108デフォルトの名無しさん:2001/02/07(水) 09:53
>>106
その方法が無効な実装も考えられる。
結局、実装依存になってしまうような気がする。
109デフォルトの名無しさん:2001/02/07(水) 10:19
>>107
>工夫されたquick sortでソートした後にバブルソートがベスト。
アホか?
少なくともバブルソートより基本挿入法のほうが速い
バブルソートがベストである根拠を言ってくれ

> 同じ文字の確立なんて低いだろ?
馬鹿か?
いつ誰が比較する値を「文字」と決めた?
いつ誰が同じデータが出現する確率が低いと言った?

勝手にデータを妄想するな、厨房!
110デフォルトの名無しさん:2001/02/07(水) 10:26
GCAソート?ってどーよ?
あと、厨房にもわかるように、詳しく解説すれ。
111デフォルトの名無しさん:2001/02/07(水) 11:03
>>77 とかホントにクイックソートのコード書けるのか?
少なくとも単純なクイックソートアルゴリズムからは元の順
番をキーに入れるしかない。

理由は、単純なクイックソートは、[前から検索]と[後ろから検索]
しながら「交換」するからだ。

これを解決するには、一旦マークした後、交換ではなく[挿入]し
なければならない。
それは 速度的には既にクイックとは言えない
11268:2001/02/07(水) 11:36
>理由は、単純なクイックソートは、[前から検索]と[後ろから検索]
>しながら「交換」するからだ。
値が同じ時に交換するしないを
位置情報で条件分岐させるんだよ
11379:2001/02/07(水) 11:48
>>112
交換する2つの値の間にどちらかと同じ値があって
飛び越してしまう可能性もあるよね。
ソレを避けるためにはその間の値をサーチするしかない。
(ソレをやるとすでにクイックソートとは言えないって
111は言いたかったんだよね?)
比較する2つの値が同値かどうかチェックするだけでは
上記の飛び越しの可能性を避けることはできないよ
(つーことで比較関数が「そのときの」位置情報が使えても無駄
っていうことに後から気が付いた自分。初期配置の情報がないと
どうやってもクイックソートは安定になりそうもない)
114デフォルトの名無しさん:2001/02/07(水) 11:59
Microsoft の qsort() の実装には、こういう問題もあったみたいね。
今はどうなんだ?

http://support.microsoft.com/support/kb/articles/Q48/9/65.ASP?LN=EN-US&SD=gn&FR=0&qry=Q48965&rnk=1&src=DHCS_MSPSS_gn_SRCH&SPR=CHS
11568:2001/02/07(水) 12:01
>値が同じ時に交換するしないを
>位置情報で条件分岐させるんだよ
では無理です

最初の順番を記憶させるか

第1比較キーが等しければ
第2比較キーで比較するように
大小比較の部分をいじるか

マージソートやビンソートを使うかだね
11668:2001/02/07(水) 12:03
>値が同じ時に交換するしないを
>位置情報で条件分岐させるんだよ
では無理です

最初の順番を記憶させるか

第1比較キーが等しければ
第2比較キーで比較するように
大小比較の部分をいじるか

マージソートやビンソートを使うかだね
117じゃ:2001/02/07(水) 12:08
おまえら全員
バブルソート
選択ソート
挿入ソート
再帰を勉強して・・・<<ここが重要だ。厨房
シェルソート
クイックソートを勉強し直せ。
現在もっともソートが最高速なのはイントロソートだ。
118105:2001/02/07(水) 12:37
>114
VC2以降は無事。
119デフォルトの名無しさん:2001/02/07(水) 13:10
クイックソートの安定がどうたら言ってる奴

今あがってる
http://piza.2ch.net/test/read.cgi?bbs=tech&key=978149371

の、 5,6,9,30 を読め
120デフォルトの名無しさん:2001/02/07(水) 13:39
このスレで議論されてるような、
速くないクイックソートを使うメリットを教えてください。
121デフォルトの名無しさん:2001/02/07(水) 14:02
>>120 イヤミか?
安定なクイックソートはキーに最初の順を入れておくしかない
そうでない改善をしたらそれはクイックソートではないって事だ
122デフォルトの名無しさん:2001/02/07(水) 15:04
で、1の結論はマージソートでいいんだな?
つうかイントロソートの概要でもいから誰か教えてくれよ
intoro sortで検索するとごみが多すぎてワケワカラン
123デフォルトの名無しさん:2001/02/07(水) 15:17
>>122

 Introspective Sorting なら D. R. Musser に聞け
http://www.cs.rpi.edu/~musser/gp/code/intsort.h.txt


そして
よかったら解説してくれ
124デフォルトの名無しさん:2001/02/07(水) 16:41
>>123のリンク先のついて
ソースは読んでない。説明では基本はクイックソート、ピボットを決める
際に選んだ数によってヒープソートに切り替えるといっている。
メモリ消費:少ない
速度:N2地雷を回避しつつ通常はクイックソート並
安定か:不安定
といった感じか?
125ソース読み非124:2001/02/07(水) 16:50
うんがー
肝心の__unguarded_partition関数の中身はどこだー
<algo.h>ってなんジャー
STL頭いてー

126デフォルトの名無しさん:2001/02/07(水) 21:07
>>109
>少なくともバブルソートより基本挿入法のほうが速い
>バブルソートがベストである根拠を言ってくれ

第一キーでソートしておけば泡の動く範囲が小さく限定されると期待できるから。
127デフォルトの名無しさん:2001/02/07(水) 21:07
おっと、泡は第二キーで動くって事ね。
128デフォルトの名無しさん:2001/02/08(木) 01:12
>>117
>もっともソートが最高速
ナイス日本語。
129デフォルトの名無しさん:2001/02/08(木) 02:36
クイックソートにしとけ。
クイックソートが不安定で困ったなんて話は聞いたことが無い。
130デフォルトの名無しさん:2001/02/08(木) 02:54
不安定よりも、N2地雷コワイよ。
131デフォルトの名無しさん:2001/02/08(木) 03:14
>>124
違う。ピボットとは関係なしに単純に再起の深さで決めている。ソースの感じだと
再起呼び出しの際に深さを表す数をつけて行っている。再起の深さがlog2(size)
になったところでヒープソートに切り替えてるようだ。当然再起にかかわるスタック
消費が増えるのでややメモリ的にはクイックソートより劣るだろう。
132デフォルトの名無しさん:2001/02/08(木) 04:00
通読して地雷を避けるのはダメかな。N+N/2+N/4+...=2N
入れ替え計算量 nlogn 通読 2N 。ま、通読じゃ遅いか。
133デフォルトの名無しさん:2001/02/08(木) 04:02
あ 2N じゃない。N*深さ=nlogn だなぁ。。
134デフォルトの名無しさん:2001/02/08(木) 04:20
N2地雷なんて実際に踏むことあるのかな。
なんか、俺もう既に整列し終わった配列をqsort関数で
ソートしてみたことあるけど、遅くならなかった気がする
のだが。これって、Cのqsort関数は純粋なクイックソート
じゃないってことだろ?
N2地雷の問題なんて多くの実装において解決済み
なんじゃない?
135デフォルトの名無しさん:2001/02/08(木) 04:50
N2地雷ってなに?
136デフォルトの名無しさん:2001/02/08(木) 05:21
>>135
ようわからんが、計算量のオーダーがNになってしまう時の
ことじゃない?
137134:2001/02/08(木) 05:34
俺は130が使ってたから、知ったかかまして、推測で使っただけ
なんだけどね。
検索しても出て来ないから、そんな言葉無いのかも。
O(n)のつもりで書いたんだけど。
138134:2001/02/08(木) 05:37
ていうか、エヴァンゲリオンか?
139デフォルトの名無しさん:2001/02/08(木) 05:44
>134
O(n^2)じゃないの?
元ネタはエヴァだね、確かもう一方のソートスレで誰かが使い始めてたような・・・
という事で外では使わない方がいいかも
140デフォルトの名無しさん:2001/02/08(木) 09:48
>>134
値を2つに分けるときの参照値の選び方を工夫すればソート済みの
データで遅くなる問題は避けられる。
べつにそうしたからってクイックソートでないって事にはならない。
>>105みたいに最初と最後と真中の位置のキーの中央値をとればだいたいOK
(厳密に言えばこれでも非効率になる初期配列もありえるはずだけど)
141135:2001/02/09(金) 11:32
Webで検索したらエヴァンゲリオンのサイトばかり引っかかって、
どっちが元ネタなのか見分けがつかなかった。
爆発するってことからも、オーダーN^2のことかな。
142デフォルトの名無しさん:2001/02/12(月) 22:24
ソートとは直接関係ないけど、キーが全て異なる配列と自然数nを入力として、
大きいほうからn番目のものをO(n)で探すアルゴリズムがあって、
それを聞いた時すげえ!と感心した記憶がある。
143デフォルトの名無しさん:2001/02/16(金) 19:44
煽りきぼーそ。

話はデータが配列かリストか、ということで全然違う。

リストなら、キーで振り分けてできたリスト2つを下請けに出せば
安定なクイックソート完成。
って、もしかしてこれはクイックソートとは言わないのか?

配列の場合だと、クイックソートのように安定でなくなるか、
(マージ|ヒープ)ソートのようにin-placeでなく(メモリ消費量が
大きく)なるか。

http://ei5nazha.yz.yamagata-u.ac.jp/ADT/sorting.html

てゆーか、配列上でのマージソートって工夫したらin-placeに
なりませんか?

144デフォルトの名無しさん:2001/02/17(土) 06:34
>>99
某STLのstd::list::sortはマージソートだったよ。
リストだと記憶領域は増えないらしい。
マージ中の領域を使いまわせる。
イテレーターの妙技を見たよ。
145デフォルトの名無しさん:2001/02/17(土) 10:06
>>129は安定なソートの意味が分かっていないと思われ
146デフォルトの名無しさん:2001/02/17(土) 12:31
比較数を少なくすることが最優先の場合は、
どんなソートがお勧め?
147143:2001/02/17(土) 15:07
車輪の再発明。つーか先走りすぎだが。

マージを再帰でやればメモリ消費せずにしかも安定なソートにできるぢゃん。
O(n(logn)^2)になってしまうが。

並列計算機のバイトニックソートの情報キボーン。
古いbit誌捨ててしまったのが悔やまれる。
148部外者A:2001/02/17(土) 17:18
再帰でやるってことはメモリ消費してるってことだろがゴルァ?>147
末尾再帰なら話は別だが。
149部外者A:2001/02/17(土) 17:25
それから、bitとかの雑誌のバックナンバーは図書館でいつでも閲覧可能だけど。>147
150デフォルトの名無しさん:2001/02/18(日) 03:28
>>144
stable_sortとstd::sortは?
151143:2001/02/18(日) 15:05
>>148
知っとるわホゲェ! (オイ
クイックソートと同じようにスタックサイズはO(logn)でOK。ってこと。

末尾再帰……わからない宇津死

>>149
すっかり忘れてました。見てきます。

>>146
元データは何?
152146>151:2001/02/18(日) 19:19
>元データは何?
たとえばMP3や獲ろ画像ファイル。
比較を人間がやるとベスト版ができるかなーと思ったので。
で、なるべく比較回数を減らして、なおかつ早い段階で
大雑把な順位付けができるようなアルゴリズムを考えてる。
変形シェルソートが有力か?
153151=143:2001/02/20(火) 23:11
>>152
なるほど。ってそれは個人でやる話?投票のような話?
個人でやる話なら……

ベスト盤作成支援ツール。条件は
1.ユーザーに「むだな比較をやらされている」と感じさせないこと。
2.ユーザーに「信頼性がある」と感じさせること。
うーん、
154デフォルトの名無しさん:2001/02/20(火) 23:38
ユーザーに比較させるとa<b,b<cだけどc<aってなりそう
155146
比較・ソートは付加的な機能で、基本はMP3プレイヤーがいいような。
今再生してるのとその前のとでどっちがいいかを
簡単なキー入力で指定する。
だから速度・計算量・使用メモリはぜんぜん問題にならない。

人間の信頼性はあてにならないので、
# >154どころかa>bが時間経ってa<bになることもありうる
なるべく評価値の近いもの同士の比較は避ける。
なるべくランダム再生になるようにする。
評価値の高いものは若干多めに再生する。
ゴミは極力再生しない。アボーンキーでもつけるか?

ってなんかソートとはあんまり関係なくなっちゃな...