R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

貝殻並べ

先日行われた、わんくま同盟 東京勉強会 #4 で「オブジェクト指向ってなんだ in 東京」というタイトルのパネルディスカッションがありました。
その中で、次のような話をされた方がいらっしゃったように記憶しています。(記憶違いだったらごめんなさい)

  • 最近は様々な機能が実装されていて便利になった。
  • 例えばソートなどはコレクションクラスなどの中に最初から実装されている。
  • つまりは自分でソートロジックを組まなくてもよい。
  • とっても便利だ。
  • 一方で、ソートロジックって何?、という人が増えてきている。

僕は、ただただ「なるほど~」と皆さんの話を興味深く聞いていた訳です。

そんな折に、つい先ほど、お客さんからの質問で以前作ったソースコードを眺めていたところ、偶然にも昔(VB5くらいの頃かな?)作った

シェルソートルーチン

が見つかっので、C# に移植してみました。

「今さら何の役に立つんだ?」とか「何でクイックじゃないの?」という話は置いておいて、取りあえず晒してみることにしました。


static public string[] ShelSort(string[] values) {
  int l = values.Length;
  int g = (int)(l / 2);
  while (g > 0) {
    for (int i = 0; i <= g; ++i) {
      for (int j = i + g; j < l; j += g) {
        for (int k = j - g; k >= i;  k -= g){
          int p = k + g;
          if (values[p].CompareTo(values[k]) > 0) {
            break;
          }
          string T = values[p];
          values[p] = values[k];
          values[k] = T;
        }
      }
    }
    g = (int)(g / 2);
  }
  return values;
}


さて、いくつか気になるところです。

まずは、当時は高速化を意識して変数名などを小さくしたり、メソッドアウトせずに作ったので可読性が悪いなぁ、という点。

次に、可読性が悪いため、移植後にあまりよく確認していない点w
(ちゃんと動くのか?)

それと、[p][k]要素の入れ替えって、.NetFramework でそういうメソッドって用意していないんだろうか?、と思われる点。
(見つからなかった orz)

最後に、CompareTo の部分はデリゲートを使って、最小順位の方法を使う側に行わせたいなぁ、と思った点。
(これも、可読性が悪くて、深くは考えるの面倒くさいw)


static void Main() {
  string[] a = { "ccccccccc", "bbbbbbbbb", "aaa", "dddddddd" };

  foreach (string s in a) {
    Debug.WriteLine(s);
  }

  a = ShelSort(a);
  Debug.WriteLine("--------------------");

  foreach (string s in a) {
    Debug.WriteLine(s);
  }
}


一応、上記で確認してみたところ、きちんと並べ替えできましたけど・・・

ちなみに、シェルソートの意味ですが、タイトルのように貝殻を並べるということではなく、考案者の名前にちなんでいるようです。

僕はてっきり、並べ替える処理が貝殻の形みたいになるからという理由だと思っていました。

投稿日時 : 2007年2月9日 14:42

Feedback

# re: 貝殻並べ 2007/02/09 14:52 シャノン

> 例えばソートなどはコレクションクラスなどの中に最初から実装されている。

これこそまったくもって、オブジェクトとは関係ない。

> それと、[p][k]要素の入れ替えって、.NetFramework でそういうメソッドって用意していないんだろうか?、と思われる点。

それを心配するくらいならソートロジックを自前で書こうなどと思わないことw

# re: 貝殻並べ 2007/02/09 15:02 R・田中一郎

>これこそまったくもって、オブジェクトとは関係ない。

コレクションというオブジェクトの持つ振舞いとして、ソートメソッドを実装するという考え方なので、オブジェクト指向ということだと思っていたのですが。

>それを心配するくらいならソートロジックを自前で書こうなどと思わないことw

なんかの言語で、swap ステートメントって用意されていたような記憶があったもんで。

swap a, b

で、a と b の値を入れ替えてくれるんです。
ちょっと素敵w

# re: 貝殻並べ 2007/02/09 15:04 シャノン

> コレクションというオブジェクトの持つ振舞いとして、ソートメソッドを実装するという考え方なので、オブジェクト指向ということだと思っていたのですが。

あぁ、その一文だけを見れば確かにその通り。
でも、その後に

> つまりは自分でソートロジックを組まなくてもよい。

と続くので「関係ない」と言った。
それを言うならCのqsortだって自分で組まなくてよいから便利なのには変わりはないのだから。

# re: 貝殻並べ 2007/02/09 15:07 シャノン

ちょっと補足。
箇条書きになっている部分全体の結論として「だから、オブジェクト指向は便利である」と締めくくるならば、ソートは根拠にならない、ということ。
それはライブラリの便利さであり、オブジェクト指向ゆえの便利さではない。

# re: 貝殻並べ 2007/02/09 15:28 R・田中一郎

なるほど、そういう意味だったのですね。
という訳で、少し表現を変えてみました。

# re: 貝殻並べ 2007/02/09 15:30 R・田中一郎

ところで、swap ステートメントの話ですが、.NetFramework って、これに近い機能って無いんでしょうかね?

# re: 貝殻並べ 2007/02/09 15:49 backdoor

脱線失礼。

おっさんメインフレーマの昔話

RDBが無い時代は順編成ファイルをSORT後、シーケンシャルマッチする処理が一般的だったけど、ユーティリティのSORTを使ってたので、SORTロジックをコーディングするケースは当時から殆どありませんでした。
せいぜいバイナリサーチコマンドを使用するための前処理でバブルソートをコーディングするケースがあった程度かな。

個人的にはシーケンシャルマッチのアルゴリズムに新鮮な驚きを感じましたっけ(遠い目)。

今ではDB設計をきっちりすれば、SQL文一発で結果が得られるのでこうした基本的なアルゴリズムに興味を抱く方はいない気がします。

ところでこんなテーマを取り上げたのは、私みたいなロートルにも参加機会をとの目的でしたか?

# re: 貝殻並べ 2007/02/09 16:25 囚人

>ところで、swap ステートメントの話ですが、.NetFramework って、これに近い機能って無いんでしょうかね?

ジェネリックの実装例として良く引き合いに出される人気者 Swap 君ですが、意外に無いものですね。
まぁそんなショーモナイメソッドがライブラリにあってもどうかと思ったりしますが^^;

# re: 貝殻並べ 2007/02/09 16:40 ぽぴ王子

ソートの話をした張本人が来たよヽ(´ー`)ノ
でもオブジェクト指向とまったく関係ない話でしたね(笑)書かれてますが、自分で内部の動きを知らなくてもコーディングできちゃうから、ソートのアルゴリズムなんか今はみんな知らないんじゃね?って話だったような。

> なんかの言語で、swap ステートメントって用意されていたような記憶があったもんで。
N88-BASICとか。

> そんなショーモナイメソッド
ショーモナイゆーな(笑)やいやいゆーな!(桂小枝)
そのぐらいおまいらで実装しる、ってことでライブラリにないのだと思いますが、上記の流れからすると「変数の中身を交換するメソッドはありませんか」とかいう質問が出てきてもおかしくないわけで。
そしたら「それぐらいおまいらで実装しる!」と吐き捨てて終了…か。

> ジェネリックの実装例として良く引き合いに出される
これか?これなのか?!
http://www.microsoft.com/japan/msdn/thisweek/300x10/phase3/generics/cs.aspx

# re: 貝殻並べ 2007/02/09 16:50 シャノン

偏見かもしれないけど、関数型言語ユーザだと、そういう粒度の細かいメソッドを再利用したがるかもしれない。

# re: 貝殻並べ 2007/02/09 17:53 とっちゃん

ぱねるですかっそんでいってたのは、アルゴリズム(元ネタはSortというよりFind)をコレクションのインスタンスメソッドとすべきなのか、それともスタティックメソッド、あるいは、コレクションクラスの外にユーティリティクラスを作ってそのスタティックメソッドとすべきなのか?という話です。

もちろん、ジェネリックの話の展開で出てきた内容の一つです。
ま、その辺の展開は...えっと前半だったっけ?後半だったっけ?もう覚えてないやww
いずれ公開されるテープに記録があると。。。www

#直接的にはオブジェクト指向がどうってネタじゃないです。

# re: 貝殻並べ 2007/02/09 23:25 囚人

>> ジェネリックの実装例として良く引き合いに出される
>これか?これなのか?!

それや!それやでぇ!!

# re: 貝殻並べ 2007/02/09 23:25 囚人

>> ジェネリックの実装例として良く引き合いに出される
>これか?これなのか?!

それや!それやでぇ!!

# re: 貝殻並べ 2007/02/10 14:33 R・田中一郎

backdoor さん
>脱線失礼。

OKOKです。

>RDBが無い時代は順編成ファイルをSORT後、シーケンシャルマッチする処理が一般的だった

これはレコード数が多いマスターファイルの場合、トランザクションファイルを別に設けて更新履歴を保存しておいて、トランザクションファイルのみにソートをして、元々ソートされている状態のマスターファイルにマッチングするという手法ですよね。(違うかな?)

以前、この方法で給与管理システムを作ったことがあります。

>せいぜいバイナリサーチコマンドを使用するための前処理でバブルソートをコーディングするケー

このシェルソートなら、COBOLでも使えますね。
クイックだと、再帰処理が書けないために、ちょっと面倒になりそう。

>ところでこんなテーマを取り上げたのは、私みたいなロートルにも参加機会をとの目的でしたか?

いえいえ、このソースコードを皆さんに晒してみたくなっただけです。
「なるほどね!」って思う人や、VB6現役の人に参考にしてもらえると嬉しいですね。

-------------------
囚人 さん

>まぁそんなショーモナイメソッドがライブラリにあってもどうかと思ったりしますが^^;

やっぱり無いんですね。
まぁ、しょーもないという点は僕もそう思います。

しかし、元から無いものを探す場合って、探してみて無いから「無い」と言い切れるのか、本当は探し方が悪くて実は「ある」んじゃないかと、いろいろ悩みは尽きないのです。

-------------------
ぽぴ王子 さん

>ソートの話をした張本人が来たよヽ(´ー`)ノ

「お前は10年前の俺か!」は、僕の名言リストに記録されましたよ。

>でもオブジェクト指向とまったく関係ない話でしたね(笑)

まぁ、言われてみるとそうなのですが、このネタを書くきかっけになったのが先日の勉強会だったという話がしたかっただけなので、ぼくにとっては細かい部分はどうでも良かったりします。

>そしたら「それぐらいおまいらで実装しる!」と吐き捨てて終了…か。

今、「子供の国」のパソコンを、子供の名前で使っているところなので、細かい部分は調べられないのですが、Math クラスで、大きい値を返すメソッドってありませんでしたっけ。
そういうノリで、swap メソッドみたいなものがあったりしないのかなー、っと思った訳です。

-------------------
シャノン さん

>偏見かもしれないけど、関数型言語ユーザだと、そういう粒度の細かいメソッドを再利用したがるかもしれない。

いや、偏見ではないでしょう。僕もそう思いますよ~

-------------------
とっちゃん

>ま、その辺の展開は...えっと前半だったっけ?後半だったっけ?もう覚えてないやww
>いずれ公開されるテープに記録があると。。。www

うんうん。
何れ調べれば分かることは、頭の中から削除しても良いんですよね。
特に僕は、搭載メモリ容量が少ないですから、メモリスワップしまくりんぐです。

# re: 貝殻並べ 2007/02/10 14:36 R・田中一郎

うわっ、子供の国のパソコンでは、InterSafe が入っていて、某有名SNS は利用できないみたいです。

MSDN フォーラムやライブラリは大丈夫・・・当たり前かw

そろそろタイムアップ。
45分しか使えないってどうなの?(T-T)

# re: 貝殻並べ 2007/02/10 21:13 backdoor

>クイックだと、再帰処理が書けないために、ちょっと面倒になりそう。

そういえばクイックSORTも作りました。COBOLじゃなくFORTRANでしたが再帰部分は
サブルーチン2つに分けましたね。
# 4倍精度の実数がSORT-KEYになる仕様だったので。
# COBOLでもポインタを上手く使えばコーディングは難しくないですよ。

>いえいえ、このソースコードを皆さんに晒してみたくなっただけです。

納得。こういう汎用アルゴリズムなら私みたいな者でも参加できます。

# re: 貝殻並べ 2007/02/11 1:03 R・田中一郎

そうかー、僕は最近のCOBOL事情をよく知らないのです。
僕のイメージでは、ポインタどころかローカル変数も使えないというもので、その感覚で書いてしまいました。
すみません。

ちなみに COBOL や N88-Basic などローカル変数も再起処理もできない言語の場合は、次のようにしていました。

・ルーチンの先頭で stackPoint 変数に 1 を加算。
・ルーチンを抜ける時に、stackPoint 変数から 1 を減算。
・ローカル変数を全て配列にして、stackPoint を要素数として使用する。

# 東京勉強会 #4レポート(まともなほう) 2007/02/14 0:42 ぽぴ王子の人生プログラミング中

東京勉強会 #4レポート(まともなほう)

# 東京勉強会 #4レポート(まともなほう) 2007/02/16 17:01 ぽぴ王子の人生プログラミング中

東京勉強会 #4レポート(まともなほう)

# Illikebuisse dilfw 2021/07/03 14:47 pharmaceptica

hydroxychloroquine sulfate tabs 200mg https://pharmaceptica.com/

# Illikebuisse vxboz 2021/07/04 23:40 pharmaceptica

chloroquine tablets amazon https://www.pharmaceptica.com/

# best erectile dysfunction pills 2021/07/11 23:38 hydroxycholorquine

hydrocychloroquine https://plaquenilx.com/# what is hcq drug

# stromectol for sale 2021/09/28 10:56 MarvinLic

generic ivermectin for humans http://stromectolfive.online# stromectol otc

# ivermectin canada 2021/11/01 7:43 DelbertBup

ivermectin buy online https://stromectolivermectin19.com/# ivermectin 80 mg
ivermectin 1

# stromectol ivermectin tablets 2021/11/02 10:53 DelbertBup

buy ivermectin cream https://stromectolivermectin19.com/# ivermectin over the counter canada
ivermectin 5 mg price

# order prednisone online canada https://prednisonesnw.com/#
can you buy prednisone over the counter in canada 2021/11/13 9:33 Prednisone

order prednisone online canada https://prednisonesnw.com/#
can you buy prednisone over the counter in canada

# sildenafil 20 mg tablet 2021/12/10 20:05 JamesDat

http://iverstrom24.online/# stromectol what is it

# buy bimatoprost 2021/12/11 17:37 Travislyday

http://bimatoprostrx.online/ bimatoprost generic

# careprost for sale 2021/12/12 12:21 Travislyday

http://stromectols.com/ ivermectin lice

# where to buy baricitinib https://baricitinibrx.com
barikind
2021/12/12 16:22 Buksdldj

where to buy baricitinib https://baricitinibrx.com
barikind

# careprost bimatoprost for sale 2021/12/16 12:18 Travislyday

http://bimatoprostrx.online/ buy bimatoprost

# stromectol in canada 2021/12/16 14:05 Eliastib

gbcupt https://stromectolr.com stromectol for humans

# doxycycline 150 mg https://doxycyline1st.com/
100mg doxycycline 2022/02/26 17:48 Jusidkid

doxycycline 150 mg https://doxycyline1st.com/
100mg doxycycline

# clomiphene for sale http://clomidfast.site/ 2022/04/12 20:26 Clomids

clomiphene for sale http://clomidfast.site/

# find doctors in my area sodium and blood pressure WordPress 2022/06/04 10:10 lvb62d

https://azithromycinfest.com/ azithromycin 250 mg price

# why are soap notes important in healthcare petition to stop health care reform phpBB 2022/06/25 8:24 albuterol without dr prescription usa

asthma inhalers https://ventolin.beauty

# lake health stroke attack first aid SMF 2022/07/06 10:37 dostromectolit.com

is ivermectin a prescription drug https://dostromectolit.com

# ycllqqslf79kmfk58j 2022/07/10 7:46 why is invokana so expensive

coupon for invokana with insurance https://invokana.beauty invokana generic date release

# what kind of pesonally identfiable health informaion is protected by hipaa? physicians practice phpBB 2022/07/11 21:08 combivent.golf

buy combivent inhaler online https://combivent.golf

# clomid online purchase https://clomidonline.icu/ 2022/07/12 23:51 Clomidj

clomid online purchase https://clomidonline.icu/

# why do they call aids tiger blood? doctor directory 2022/07/15 21:13 furosemide.beauty

lasix https://furosemide.directory

# dtjkoeqzqtosxdjrle 2022/07/17 19:47 stromectoltb.com

https://stromectoltb.com ivermectin tablets dosage

# fire department health and safety officer training best primary care doctor near me 2022/07/21 14:08 lasix

furosemide 20 mg for dog https://furosemide.directory

# vhwwxhemnaotyporqg 2022/07/31 9:59 stromectolgl.com

stromectol for lice https://stromectolgl.com stromectol cost

# what am i missing with medicare with united healthcare aetna healthcare 2022/08/02 17:54 lasix pills 20 mg

side effects of lasix https://furosemide.directory

# gmqaotbujhgarrgf18 2022/08/07 17:55 ivermectin for humans where to buy locally

ivermectin for humans for sale https://stromectolgl.com is a prescription required for ivermectin tablets

# which foods are best at reducing blood pressure? hiv long term with one testicle pain what are testicular cancer symptoms SMF 2022/08/15 11:30 fildena.beauty

https://fildena.beauty pros and cons of fildena 100

# xfmqciwplpxy gczrfvqmarzqj 2022/08/29 18:12 program assistance ventolin inhaler coupons

albuterol sulfate hfa ventolin hfa https://otcalbuterol.net

# swu62mryycle fgh81cixhmrt 2022/09/12 7:30 inhaler price

albuterol from mexico https://ventolinof.com

# yiar91vblhyd hjf48yqgmaba 2022/09/19 10:51 ventolinrx.com

ventolin hfa manufacturer coupon https://ventolinrx.com

# be healthcare mass health Joomla 2022/09/20 21:47 disulfiram.beauty

https://disulfiram.beauty disulfiram category class

# local cpr classes xhamster she fixes his impotence SMF 2022/10/05 4:40 dapoxe.com

buy priligy priligy 30mg india https://dapoxe.com

# bactrim and sepra without a presription https://antibiotic.best/ 2022/10/08 8:52 Antibiotic

bactrim and sepra without a presription https://antibiotic.best/

# aids.gov/hiv-aids-basics/hiv-aids-101/what-is-hiv-aids/ best blood pressure monitor SMF 2022/10/09 5:54 levothyroxine 100 mcg

inhalers https://albuterol.one

#  https://clomidforsale.site/ 2022/11/13 21:19 ForSale

https://clomidforsale.site/

# 50 mg prednisone tablet https://prednisonepills.site/
prednisone 2022/11/30 7:54 Prednisone

50 mg prednisone tablet https://prednisonepills.site/
prednisone

# ed medications https://cheapestedpills.com/
erectile dysfunction medications 2022/12/10 22:14 CheapPills

ed medications https://cheapestedpills.com/
erectile dysfunction medications

# Dope prescribing information. Name brand names. In Canada xvuheus 2023/01/03 18:44 sildenafil.beauty

Medicament information leaflet. Drug Class. https://sildenafil.beauty sildenafil cost us. Actual low-down about pills. Get here.

# best ed treatment https://edpills.science/
ed pills for sale 2023/01/07 14:00 Edpills

best ed treatment https://edpills.science/
ed pills for sale

# pillole per erezione in farmacia senza ricetta https://viasenzaricetta.com/# 2023/04/16 14:30 ViaSenza

pillole per erezione in farmacia senza ricetta https://viasenzaricetta.com/#

# doxycycline 50 mg - https://doxycyclinesale.pro/# 2023/04/21 23:21 Doxycycline

doxycycline 50 mg - https://doxycyclinesale.pro/#

# buy cytotec - https://cytotecsale.pro/# 2023/04/29 6:29 Cytotec

buy cytotec - https://cytotecsale.pro/#

# over the counter inhaler walmart https://overthecounter.pro/# 2023/05/09 0:35 OtcJikoliuj

over the counter inhaler walmart https://overthecounter.pro/#

# cheap meds no prescription https://pillswithoutprescription.pro/# 2023/05/15 5:17 PillsPresc

cheap meds no prescription https://pillswithoutprescription.pro/#

# otc ed pills: https://edpills.pro/# 2023/05/15 22:15 EdPillsPro

otc ed pills: https://edpills.pro/#

# order fildena for sale Learn about the benefits and risks of using blood thinning medication. Get here. 2023/06/23 0:49 fildena

http://fildena.top/

# top ed pills https://edpill.pro/# - the best ed pills 2023/06/27 16:03 EdPills

top ed pills https://edpill.pro/# - the best ed pills

# paxlovid generic https://paxlovid.store/
paxlovid india 2023/07/13 17:48 Paxlovid

paxlovid generic https://paxlovid.store/
paxlovid india

# Paxlovid buy online https://paxlovid.life/# paxlovid buy 2023/07/26 1:57 Paxlovid

Paxlovid buy online https://paxlovid.life/# paxlovid buy

# valtrex 500 mg https://valtrex.auction/ generic valtrex for sale 2023/10/24 23:46 Valtrex

valtrex 500 mg https://valtrex.auction/ generic valtrex for sale

# how to order doxycycline https://doxycycline.forum/ buy doxycycline online 2023/11/25 14:39 Doxycycline

how to order doxycycline https://doxycycline.forum/ buy doxycycline online

# Medications and Sinus Health - Relieving Congestion and Pressure revatio coupons 2024/11/07 0:06 buy assurans

https://community.jmp.com/t5/user/viewprofilepage/user-id/55075 revatio 100mg

# Medications and Healthy Habits - Paving the Way to Optimal Wellness side effects prednisolone cats 2024/11/12 6:48 prednisolone 5mg

https://community.concur.com/t5/user/viewprofilepage/user-id/129580 prednisolone side effects in cats

タイトル
名前
Url
コメント