#include <stdio.h>
#include <stdlib.h>
//swap、2つの値を入れ替えるだけ(ソートで必須)
void swap(int *x, int *y){
int tmp = *x;
*x = *y;
*y = tmp;
}
//reverse、配列を逆順にする(演習0)
//前と後ろをswapしていくだけ。半分まででOK。
void reverse(int *a, int n){
for(int i = 0; i < n/2; i++){
swap(&a[i], &a[n-1-i]);
}
}
//printA、配列を出力するだけ(確認用)
void printA(int *a, int n){
for(int i = 0; i < n; i++){
}
}
//バブルソート(BubbleSort)
//隣同士を比べて逆ならswap。これをn回繰り返すだけ。
//大きいのが後ろに“浮く”イメージ。
//O(n^2) → 2重ループだから。
void bubble_sort(int *a, int n){
for(int i = 0; i < n-1; i++){ //後ろからi個は確定
for(int j = 0; j < n-1-i; j++){ //隣同士を比較
if(a[j] > a[j+1]){
swap(&a[j], &a[j+1]);
}
}
}
}
//選択ソート(SelectionSort)
//未整列の中から最小値を探して、先頭と入れ替えるだけ。
//毎回「最小値の位置」を探す必要がある。
//O(n^2) → 最小値探しがO(n)、それをn回。
void selection_sort(int *a, int n){
for(int i = 0; i < n-1; i++){
int min_i = i; //ひとまずi番目を最小と仮定
for(int j = i+1; j < n; j++){
if(a[j] < a[min_i]){
min_i = j;
}
}
swap(&a[i], &a[min_i]); //見つけた最小値と入れ替え
}
}
//挿入ソート(InsertionSort)
//手札を並べるイメージ。左側は整列済みとして扱う。
//a[i] を一時保存して、適切な位置まで後ろにずらす。
//ほぼ整列済みのデータには超強い。
//O(n^2) → ずらす処理が最大n回、それをn回。
void insertion_sort(int *a, int n){
for(int i = 1; i < n; i++){
int key = a[i]; //挿入したい値
int j = i - 1;
while(j >= 0 && a[j] > key){ //keyより大きいのを後ろへ
a[j+1] = a[j];
j--;
}
a[j+1] = key; //ここが挿入位置
}
}
int main(void){
int n;
int *a
= (int *)malloc(sizeof(int) * n
); for(int i = 0; i < n; i++){
}
//ここで好きなソートを試す(コメント切り替え)
//bubble_sort(a, n);
//selection_sort(a, n);
insertion_sort(a, n);
printA(a, n);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8vc3dhcOOAgTLjgaTjga7lgKTjgpLlhaXjgozmm7/jgYjjgovjgaDjgZHvvIjjgr3jg7zjg4jjgaflv4XpoIjvvIkKdm9pZCBzd2FwKGludCAqeCwgaW50ICp5KXsKCWludCB0bXAgPSAqeDsKCSp4ID0gKnk7CgkqeSA9IHRtcDsKfQoKLy9yZXZlcnNl44CB6YWN5YiX44KS6YCG6aCG44Gr44GZ44KL77yI5ryU57+SMO+8iQovL+WJjeOBqOW+jOOCjeOCknN3YXDjgZfjgabjgYTjgY/jgaDjgZHjgILljYrliIbjgb7jgafjgadPS+OAggp2b2lkIHJldmVyc2UoaW50ICphLCBpbnQgbil7Cglmb3IoaW50IGkgPSAwOyBpIDwgbi8yOyBpKyspewoJCXN3YXAoJmFbaV0sICZhW24tMS1pXSk7Cgl9Cn0KCi8vcHJpbnRB44CB6YWN5YiX44KS5Ye65Yqb44GZ44KL44Gg44GR77yI56K66KqN55So77yJCnZvaWQgcHJpbnRBKGludCAqYSwgaW50IG4pewoJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CgkJcHJpbnRmKCIlZCAiLCBhW2ldKTsKIAl9CglwcmludGYoIlxuIik7Cn0KCi8v44OQ44OW44Or44K944O844OI77yIQnViYmxlU29ydO+8iQovL+mao+WQjOWjq+OCkuavlOOBueOBpumAhuOBquOCiXN3YXDjgILjgZPjgozjgpJu5Zue57mw44KK6L+U44GZ44Gg44GR44CCCi8v5aSn44GN44GE44Gu44GM5b6M44KN44Gr4oCc5rWu44GP4oCd44Kk44Oh44O844K444CCCi8vTyhuXjIpIOKGkiAy6YeN44Or44O844OX44Gg44GL44KJ44CCCnZvaWQgYnViYmxlX3NvcnQoaW50ICphLCBpbnQgbil7Cglmb3IoaW50IGkgPSAwOyBpIDwgbi0xOyBpKyspeyAvL+W+jOOCjeOBi+OCiWnlgIvjga/norrlrpoKCQlmb3IoaW50IGogPSAwOyBqIDwgbi0xLWk7IGorKyl7IC8v6Zqj5ZCM5aOr44KS5q+U6LyDCgkJCWlmKGFbal0gPiBhW2orMV0pewoJCQkJc3dhcCgmYVtqXSwgJmFbaisxXSk7CgkJCX0KCQl9Cgl9Cn0KCi8v6YG45oqe44K944O844OI77yIU2VsZWN0aW9uU29ydO+8iQovL+acquaVtOWIl+OBruS4reOBi+OCieacgOWwj+WApOOCkuaOouOBl+OBpuOAgeWFiOmgreOBqOWFpeOCjOabv+OBiOOCi+OBoOOBkeOAggovL+avjuWbnuOAjOacgOWwj+WApOOBruS9jee9ruOAjeOCkuaOouOBmeW/heimgeOBjOOBguOCi+OAggovL08obl4yKSDihpIg5pyA5bCP5YCk5o6i44GX44GMTyhuKeOAgeOBneOCjOOCkm7lm57jgIIKdm9pZCBzZWxlY3Rpb25fc29ydChpbnQgKmEsIGludCBuKXsKCWZvcihpbnQgaSA9IDA7IGkgPCBuLTE7IGkrKyl7CgkJaW50IG1pbl9pID0gaTsgLy/jgbLjgajjgb7jgZpp55Wq55uu44KS5pyA5bCP44Go5Luu5a6aCgkJZm9yKGludCBqID0gaSsxOyBqIDwgbjsgaisrKXsKCQkJaWYoYVtqXSA8IGFbbWluX2ldKXsKCQkJCW1pbl9pID0gajsKCQkJfQoJCX0KCQlzd2FwKCZhW2ldLCAmYVttaW5faV0pOyAvL+imi+OBpOOBkeOBn+acgOWwj+WApOOBqOWFpeOCjOabv+OBiAoJfQp9CgovL+aMv+WFpeOCveODvOODiO+8iEluc2VydGlvblNvcnTvvIkKLy/miYvmnK3jgpLkuKbjgbnjgovjgqTjg6Hjg7zjgrjjgILlt6blgbTjga/mlbTliJfmuIjjgb/jgajjgZfjgabmibHjgYbjgIIKLy9hW2ldIOOCkuS4gOaZguS/neWtmOOBl+OBpuOAgemBqeWIh+OBquS9jee9ruOBvuOBp+W+jOOCjeOBq+OBmuOCieOBmeOAggovL+OBu+OBvOaVtOWIl+a4iOOBv+OBruODh+ODvOOCv+OBq+OBr+i2heW8t+OBhOOAggovL08obl4yKSDihpIg44Ga44KJ44GZ5Yem55CG44GM5pyA5aSnbuWbnuOAgeOBneOCjOOCkm7lm57jgIIKdm9pZCBpbnNlcnRpb25fc29ydChpbnQgKmEsIGludCBuKXsKCWZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspewoJCWludCBrZXkgPSBhW2ldOyAvL+aMv+WFpeOBl+OBn+OBhOWApAoJCWludCBqID0gaSAtIDE7CgkJd2hpbGUoaiA+PSAwICYmIGFbal0gPiBrZXkpeyAvL2tleeOCiOOCiuWkp+OBjeOBhOOBruOCkuW+jOOCjeOBuAoJCQlhW2orMV0gPSBhW2pdOwoJCQlqLS07CgkJfQoJYVtqKzFdID0ga2V5OyAvL+OBk+OBk+OBjOaMv+WFpeS9jee9rgoJfQp9CgppbnQgbWFpbih2b2lkKXsKCWludCBuOwoJc2NhbmYoIiVkIiwgJm4pOwoKCWludCAqYSA9IChpbnQgKiltYWxsb2Moc2l6ZW9mKGludCkgKiBuKTsKCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewoJCXNjYW5mKCIlZCIsICZhW2ldKTsKCX0KCgkvL+OBk+OBk+OBp+WlveOBjeOBquOCveODvOODiOOCkuippuOBme+8iOOCs+ODoeODs+ODiOWIh+OCiuabv+OBiO+8iQoJLy9idWJibGVfc29ydChhLCBuKTsKCS8vc2VsZWN0aW9uX3NvcnQoYSwgbik7CglpbnNlcnRpb25fc29ydChhLCBuKTsKCglwcmludEEoYSwgbik7CgoJZnJlZShhKTsKICAJcmV0dXJuIDA7Cn0K