From b1e74292c46231427c8b3acac1155d19b035dcac Mon Sep 17 00:00:00 2001 From: kemasama Date: Fri, 22 Apr 2022 20:22:28 +0900 Subject: [PATCH] add quick sort --- README.md | 20 ++++++++ quick_sort/q_sort.c | 117 ++++++++++++++++++++++++++++++++++++++++++++ quick_sort/qsort | Bin 0 -> 33714 bytes 3 files changed, 137 insertions(+) create mode 100644 quick_sort/q_sort.c create mode 100755 quick_sort/qsort diff --git a/README.md b/README.md index 609888d..6c5bb55 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ 構造体とポインタについての学習 +2022/04/09 + #### 処理内容 1. 生徒配列を定義する @@ -12,6 +14,24 @@ 3. ランダムに点数を生成する 4. 科目ごとの平均点、最大点、最低点を標準出力する +### クイックソート + +数値配列のクイックソートを行う + +2022/04/22 + +#### 処理内容 + +1. 配列と、左端(0)、右端(配列の長さ)を渡す +2. 左端が右端以上であるならピボットを取得する +3. ピボット(左端)のデータより小さければiをすすめる +4. ピボットのデータより大きければjを戻す +5. 中央値まで求めたらそのデータを比較し、入れ替える +6. i が j 以下であればループを行う +7. ピボットとjを入れ替える +8. ピボットより小さいデータをクイックソートする +9. ピボットより大きいデータをクイックソートする + # Copyright Copyright (c) 2022 kema All Rights Reserved. diff --git a/quick_sort/q_sort.c b/quick_sort/q_sort.c new file mode 100644 index 0000000..66c4417 --- /dev/null +++ b/quick_sort/q_sort.c @@ -0,0 +1,117 @@ +#include +#include +#include + +/*********************************** +XとYを入れ替える +***********************************/ +int +swap( +int *x, +int *y +) +{ + int temp; + + temp = *x; + *x = *y; + *y = temp; + + return 0; +} + +/*********************************** +中央値(Pivot)を求め、入れ替える +***********************************/ +int +get_pivot( +int array[], +int left, +int right +) +{ + int i; + int j; + int pivot; + + i = left; + j = right + 1; + pivot = left; + + do + { + do + { + i++; + } while ( array[i] < array[pivot] ); + + do { + j--; + } while ( array[pivot] < array[j] ); + + if ( i < j ) + { + swap(&array[i], &array[j]); + } + } while (i < j); + + swap(&array[pivot], &array[j]); + + return j; +} + +/*********************************** +クイックソートを行う +***********************************/ +int +q_sort( +int array[], +int left, +int right +) +{ + int pivot; + + if ( left < right ) + { + pivot = get_pivot(array, left, right); + q_sort(array, left, pivot - 1); + q_sort(array, pivot + 1, right); + } + + return 0; +} + +/*********************************** +メイン関数 +***********************************/ +int +main() +{ + int array[] = { + 10, 20, 30, 50, + 50, 10, 45, 65, + 76, 54, 56, 15, + 34, 31, 14, 17, + 14, 15, 11, 16, + 90, 19, 98, 76, + 75, 15, 161, 165, + 166, 167, 87, 86 + }; + + int length = sizeof(array) / sizeof(int); + + printf("Length: %d\n", length); + q_sort(array, 0, length); + + int i ; + + for ( i = 0 ; i < length ; i++ ) + { + printf("%d", array[i]); + printf("\n"); + } + + return 0; +} + diff --git a/quick_sort/qsort b/quick_sort/qsort new file mode 100755 index 0000000000000000000000000000000000000000..a2b74ff5032962f49e10b607ecec1f508be3ac87 GIT binary patch literal 33714 zcmeI5ZETZO6vyw=Zql)Zj<6s^WJN^4CPZn|kFcR8#B^veRLau)qQVV@YuAu>tf=6z zuDdMCa|IoxEGsN88{4en?PGnyuv6iVDfN)j=WOv&O_$_+({lC24ANpCWE)l8ks|zh zMgNu3>uav`#$CzzhVt}$4;wwmPRwU9@`0feDXSXX-q8sr=bN!q&*wM#lbx8)aK{Ve z^ZJ@x?i$0BobN*;AMG0n*@=>zTgqnlR+rl$UGC}zbWG0IYve06l8~L8BQZbiYlq6S zJijbo7OW{*r|+)aI8-Q=B$Z}3Nonshp;Fc~j8Y?e{Cqa_RbtoU4NKgI3gwH*=(%0J zqGVO!@)i251nvHq^9Gyblo3pAs$F@7cnT3TKZ>JuK55t;u*+c+n`zJ?*l8%cci{hn zG94OYh^ms73;>dz*4LyDD=Wt(zUNNgjaGJZfIM{cd30 z!bL~COZQn8dagbJpAD)(RkS%n)%E2Ln;wN%txvTJF%RpbJhzq@4x^xPpM_Ezt=a6z z#&WdLxnMr)TD?AJ{eoo+FfUgnIzb+RQvTolLRe7FH*DfX@*tGjZ99cHs85pIEKGn2 zFaajO1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)Aj zFaajO1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%kz&He=yF~w>RYb0)i%7_7k61K& zFk}_MP`X|Z!#7WZZM6r(@KGIC2iGDlaMmm@N6(4=kv3D$2<*;X*+X3g*?rfhh+ubt z>{EHB*n^f-F*%fO_$G)TuK#6`Qcl%|@yPDpC5OURf6&tE>gz%MrwRVx{MJo<7A>vr z_?>83JT6_uHB!!a9QwxN((jHl<{zY7D>b2V#l{n9X?s;2aT@BMMx*b?$I{oW;_8O= zIjFuEFFEcc;s!Cdk+x+$;BrqsVPZq`G3oQ^#G1Rn?Hc^YC>OZId^CSks%ZQfe)5s6 zfh+aBZp@eVWz5)SGxjFEXXKnIfIFGJmQ=N;k#6jh1$}9MqH{%X@M94e#QtN=2WEM4 z1Ex&>z|%ssTT;+xwg`r2<4l;-j^X$m5T3k1*en7#2az1~xr%vU&5>*9^A+Y1&DQrM zl#TNOAFXebvA%G&KN!MTY1rR*zRuBnxZB#U#yF7|!2Q#9+5^g?&It0}h(_;ETnC*I zU)2*en-zP+x8u%fZ>Gr}5vJ_Rsy;EHK1r`n#GqNwnNYe%OG>`Sq506& z&}X1@FV+fu2$~J0ySj8An@aN2U0}N7x&b-`N>^hkb`_M`yP%&yk3f$?*F#@|u6DX> ze6@>ha~u=J9ETcO-QAsmHj>2B1e@-<NfC(@GCcp%k025#WOn?b60Vco%m;e)C z0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C z0!)AjFaajO1egF5_}>ZGFhVKxRVckpu73*v6-eS+<@EMfTpPDK#llMXIc? zmChDtRkP12Yn>GiXOmd$-CE%hc{NU-^tiU*(fEQ!>1}B8iQ@VSms>nfUobF>ju!k} zp`W2`__@_aIUyY__D<7w{S9-gMqg#XP|&GRD=Ovqh635M44d9TCws18w-`3QaiRLt zHy5ZK-^HMks!EFRn`qOw9}?}#B%9ubr+44!jdZGmY}`gw*nsVB7IKt=RI8T;3#lOe zTlO@dA;UjroW;x!!i=pg3qIQA*M$kE!=%0;@e10@jgT}UcG_$v^;Es#`lrGkYt$Om zHcq|s<&i^e{tL%S*Ealle(COCXWtCe=6>*3Xost+|6+67$u~}%DsT8YTzxj>`~Lnq z)0*