コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
くらげ ◆wwGQuv.PrBB8
2019/4/22 20:44 ネタバレ
協力
思い付いたソートについて
えー、僕が脳死状態の時になんか思い付いたソートについてなにか意見をください。

はじめに:語彙力がクソです。

条件:要素数が偶数である
n:分割する数
a:要素数

~順序
(n=2とする)

1.ソートするデータをn分割し、それぞれの合計を求める。
2.その合計でバブルソートを行い、分割した部分を交換する。
3.n=n*2
4.n>=a である場合、7にジャンプ。
5.a mod n>0 が成立する場合は、3に戻る。
6.1に戻る。

7.要素に対してバブルソートを行う。
8.交換回数が0になれば完了。

~例
1,6,5,3,2,4
をソートする場合、
1,6,5|3,2,4
とn分割して、それぞれの合計を求める。
12|9
となるので、2つの合計を交換(バブルソート)する。


3,2,4,1,6,5
4分割できず、かつ8分割では要素数を越えているためバブルソートを行う。

2,3,4,1,6,5

2,3,1,4,6,5

2,3,1,4,5,6

2,1,3,4,5,6

1,2.3,4,5,6

交換されなくなったので終了。(無交換の場所は割愛)

多分非効率です。
似てるソートがあるとか、とにかくなんでもいいので意見をください。

コメント

アバター
RU-RA 2019/4/22 20:54 ◆WXDJqyOv9yBK
3分割や6分割ができれば効率がよくなると。
要素数の数を検出し、

余りは0
nが前回のnより大きく、その中でも一番小さい

を達成した数をnに代入できれば、、、(語彙力)
アバター
くらげ 2019/4/22 20:57 ◆wwGQuv.PrBB8
要素8(逆順)

8,7,6,5,4,3,2,1

4,3,2,1,8,7,6,5(2分割バブルソート)

2,1,4,3,6,5,8,7(4分割バブルソート)

後は普通に

1,2,4,3,6,5,8,7

1,2,3,4,6,5,8,7

1,2,3,4,5,6,8,7

1,2,3,4,5,6,7,8

終了。(無交換の場所は割愛)
アバター
くらげ 2019/4/22 20:59 ◆wwGQuv.PrBB8
>>RU-RAさん

めっちゃ参考になります。

要素数が3や6で割り切れる時は3分割や6分割するという事ですよね?
アバター
RU-RA 2019/4/22 21:04 ◆WXDJqyOv9yBK
ソートはそこまで詳しくないですが、結構速そうですね。
アバター
RU-RA 2019/4/22 21:07 ◆WXDJqyOv9yBK
はい。そういうことです。
アバター
くらげ 2019/4/22 21:09 ◆wwGQuv.PrBB8
そんな事言ってもらえると、いやー嬉しいっす。(ニヤニヤ)
アバター
RU-RA 2019/4/22 21:09 ◆WXDJqyOv9yBK
素数を使うのもてですね。
nに素数を代入することができれば、、、
アバター
こういち 2019/4/22 21:12 ◆ou0jbJnEJ0Kb
考え方としてはマージソートや奇数ソートのそれに近いかな。詳しくは知らんけど。
アバター
くらげ 2019/4/22 21:25 ◆wwGQuv.PrBB8
奇数ソートとかバケットソートのバケツって解説だけ聞くとあまり早そうに思えないのは僕だけでしょうか。(くらげには理解力が無い)
アバター
くらげ 2019/4/22 21:31 ◆wwGQuv.PrBB8
マージソートにも近いのですか。

素数ですか……なんか早くなりそう。詳しくは分かりませんが。
アバター
RU-RA 2019/4/22 21:40 ◆WXDJqyOv9yBK
素数を使うと手順4が早く、そして要領の軽減にもなると思います。一番小さい素数から順に要素数の数がその素数のかずで割りきれるのかを調べればいいと思います。

問題はその素数をどう出すかですね、、、
それがわかればくらげさんのを改良したソートができるのに、、、
素数の公式とかありませんかね?
アバター
くらげ 2019/4/22 21:47 ◆wwGQuv.PrBB8
リーマンの素数公式って言うのがあるっぽいけど、僕には理解デキマセン。
アバター
くらげ 2019/4/22 21:50 ◆wwGQuv.PrBB8
でもこれ求まるの個数だけか……………
アバター
RU-RA 2019/4/22 21:53 ◆WXDJqyOv9yBK
これはあれですね、リーマンの素数公式はxよりも小さい素数の「個数」を求めるなので無理ですね、、、、

もうDATA使っちゃいます?
アバター
くらげ 2019/4/22 22:01 ◆wwGQuv.PrBB8
一応試し割り法とか言うアルゴリズム(?)はあるっぽい。でも時間がかかる。他にも早そうなのはあるけどとても実装できるとは思えないです……。
アバター
こういち 2019/4/23 4:43 ◆ou0jbJnEJ0Kb
バケットソートは使える場面は限られてくるけど、使えさえすればクイックソートを圧倒する速度。
基数ソートはバケットソートの条件を緩くしたような感じ。理論上は速いけど、実用上はそんなに速くはないかも。
あとバブルソートの部分、挿入ソートにしたら速くなるかも。
アバター
くらげ 2019/4/23 16:12 ◆wwGQuv.PrBB8
なるほど。それも良いですね。

因みにこのソートの名前を発表します。

・クラッシュソート・

適当です。

一日過ぎたら色々改良案が出てきたので書きます。

・n分割バブルソートをする際に、合計が一致している場合は平均値で比較する。
・もういっそ全部平均値にする。
・割り切れる時はn=n*2の値以外でも分割する。
・手順7を挿入ソートにする。
・nに素数を利用する。

RU-RAさん、こういちさん、貴重なご意見ありがとうございます!

話変わりますが、クラッシュソートはまあバブルソートの改良みたいな位置付けなのかな?
あと個人的に逆順には強いと思っています。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -