[アルゴリズム] クイックソートの実装(C言語編)

abstract-1239439_1280
LINEで送る
Share on GREE
Share on LinkedIn

C言語ってオワコンなんでしょうか?
エンジニアと話しているとどうしてもそういう流れの話になってしまいます。
Objective-Cも今ではswiftにほぼ変わっていて、Appleにも見放されてる感が否めません。
個人的には、スピードの優位点がダントツであるので、好きな言語の一つなんですけどね。

とりあえず、クイックソートのC言語書いてみました。

ソース

実行

解説

「Segmentation fault: 11」エラーが出たら・・・

今回のプログラムを書いていた時に、42行目、45行目の値で、+1,-1を追加することで解決したんですが、この演算を加えないと、
無限ループに陥って「Segmentation fault: 11」エラーが発生していました。
不思議なことに、他の言語では、この演算入れなくても正常に動作できたので、正直何が違うか理解できないまま、終了してしまいました。
単純に考えてみると、同じ値で無限ループするという内容なので、1ずつシフトする記述なんですが、C言語の方が厳密に処理されているんでしょうね。
この真相については、別途研究してみようと思います。

関数のreturn扱い

C言語は関数の戻り値に関しても厳密に管理されている言語です。
他のWEB系ゆるゆる言語であれば、関数の途中で処理しなくていい状態になったら、空やその状態でreturnすることで関数処理自体を抜けられるんですが、
C言語は、厳密に値を戻さなければ行けないし、その戻り値をちゃんと受け取らなければいけません。
更にいうと、受け取った値をちゃんと利用されていないとエラーが出る場合があります。
ゆるゆる言語との差は、こうした事を厳密に設計しなければいけないという事ですね。
今回は、無駄なreturnを無くし、if文で処理判定を行い関数内で対応しました。
※詳しくは多言語と比較してみてください。

wikipediaにソース載ってた・・・orz

クイックソートの解説も詳細にかかれている上、C言語のみソースコードが載っていました。
https://ja.wikipedia.org/wiki/%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%BD%E3%83%BC%E3%83%88
ほとんど同じソースコードだったんですが、独自の配列変数を作って行っている部分が僕の稚拙なソースコードよりもイケてるな〜って感じました。
こういう部分から、ソースコードスキルってアップしていくんですね。

ちなみに、下記にコピっておきました。参考までにどうぞ。

参考リンク

クイックソート

解説
Javascript
PHP
Python
Shell
Awk
C言語

アルゴリズム過去記事

http://wordpress.ideacompo.com/?cat=562&tag=Algorithm

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です