オライリーから出ているBeautiful Codeを一日中読んでいた。
ビューティフルコード (THEORY/IN/PRACTICE)
- 作者: Brian Kernighan,Jon Bentley,まつもとゆきひろ,Andy Oram,Greg Wilson,久野禎子,久野靖
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/23
- メディア: 大型本
- 購入: 30人 クリック: 617回
- この商品を含むブログ (171件) を見る
さくさく読み進めれる本ではないし、通勤電車の中で読み進めれるような本ではないので、この連休中にまとめて読むことにする。でも、あんまり休めないんだよなぁ。夜ちょっと早く帰って読み進めるのが関の山かな?
で、現在第三章。クイックソートに関する記事なのだが、ちょうど良い機会だ。久しぶりにC言語のソースを書いてみることにする。とりあえず、例3-1で示されたソースの完全版。
#include <stdio.h> #include <stdlib.h> #define LIST_MAX 100 int list[LIST_MAX]; void swap(int *a,int *b); void swap2(int i,int j); void quicksort(int l,int u); int randint(int min,int max); int main(void) { int i = 0; int new_i; for( i = 0 ; i < LIST_MAX ; i++ ){ list[i] = i; } for( i = 0 ; i < LIST_MAX ; i++ ){ new_i = rand() / (RAND_MAX / LIST_MAX + 1); swap(list+i,list+new_i); } for( i = 0 ; i < LIST_MAX ; i++ ){ printf("[before]i = %d , list[i] = %d\n",i,list[i]); } quicksort(0,LIST_MAX - 1); for( i = 0 ; i < LIST_MAX ; i++ ){ printf("[after]i = %d , list[i] = %d\n",i,list[i]); } return 0; } void swap(int *a,int *b){ int tmp; tmp = *a; *a = *b; *b = tmp; } int randint(int min,int max){ int tmp = min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); return tmp; } void quicksort(int l,int u){ int i,m,tmp; if( l >= u ){ return; } tmp = randint(l,u); swap2(l,tmp); m = l; for( i = l+1 ; i <= u ; i++ ){ if(list[i] < list[l]){ ++m; swap2(m,i); } } swap2(l,m); quicksort(l,m-1); quicksort(m+1,u); } void swap2(int i,int j){ int tmp = list[i]; list[i] = list[j]; list[j] = tmp; }
うん。汚いけど、とりあえずこれで進めよう。気力が続けば、続きます。