<ソートアルゴリズムの実装>
テンプレートを使用する
課題:
交換ソートの実装
選択ソート
挿入ソート
添付ファイル:
交換ソート
選択ソート
挿入ソート
コンパイル方法
通常版
bcc32 sort.c
ソート結果出力版
bcc32 –DDEBUG sort.c
実行例
> sort
データタイプ(1-3)
ランダム:1 昇順:2 降順:3 1
データ数: 10
比較: 45 回 交換: 20 回
(ソートテンプレート)
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
void sort(int *data, int n);
int compare(int a, int b);
void swap(int *d, int a, int b);
void initRandData(int *d, int n);
void initAscendingData(int *d, int n);
void initDescendingData(int *d, int n);
void printdata(int *d, int n);
unsigned long counterSwap;
unsigned long counterComp;
void sort(int data[], int n)
{
/* ここにソートプログラムを作成 */
}
int main(void)
{
int *data;
int n;
int i;
int com;
void (* initData[3])(int *d, int x) = {initRandData,
initAscendingData,
initDescendingData };
do {
printf("データタイプ(1-3)\n");
printf("ランダム:1 昇順:2 降順:3 ");
scanf("%d", &com);
} while (! (com==0||com==1||com==2||com==3));
printf("データ数: ");
scanf("%d", &n);
data = (int*) malloc(sizeof(int) *n);
if (com==0) {
for (i=0; i<n; i++) {
scanf("%d", &data[i]);
}
} else {
initData[com-1](data, n);
}
#ifdef DEBUG
printdata(data, n);
#endif
counterSwap = 0;
counterComp = 0;
sort(data, n);
#ifdef DEBUG
printdata(data, n);
#endif
printf(" 比較: %d 回\n", counterComp);
printf(" 交換: %d 回\n", counterSwap);
return 0;
}
int compare(int a, int b)
{
counterComp++;
return (a<b);
}
void swap(int *d, int a, int b)
{
int tmp;
counterSwap++;
tmp = d[a];
d[a] = d[b];
d[b] = tmp;
}
void initRandData(int *d, int n)
{
int i, s;
srand(time(NULL));
s=n*10;
for(i=0; i<n; i++) d[i]=rand()%s;
}
void initAscendingData(int *d, int n)
{
int i;
for(i=0; i<n; i++) d[i]=i;
}
void initDescendingData(int *d, int n)
{
int i;
for(i=0; i<n; i++) d[i]=n-i-1;
}
void printdata(int *d, int n)
{
int i;
for (i=0; i<n; i++) printf("%d ", d[i]);
printf("\n");
}
77yc44K944O844OI44Ki44Or44K044Oq44K644Og44Gu5a6f6KOF77yeCuODhuODs+ODl+ODrOODvOODiOOCkuS9v+eUqOOBmeOCiwoK6Kqy6aGM77yaCuS6pOaPm+OCveODvOODiOOBruWun+ijhQrpgbjmip7jgr3jg7zjg4gK5oy/5YWl44K944O844OICgrmt7vku5jjg5XjgqHjgqTjg6vvvJoK5Lqk5o+b44K944O844OICumBuOaKnuOCveODvOODiArmjL/lhaXjgr3jg7zjg4gKCuOCs+ODs+ODkeOCpOODq+aWueazlQrpgJrluLjniYgKYmNjMzIgc29ydC5jCuOCveODvOODiOe1kOaenOWHuuWKm+eJiApiY2MzMiDigJNEREVCVUcgc29ydC5jCgrlrp/ooYzkvosKPiBzb3J0CuODh+ODvOOCv+OCv+OCpOODlygxLTMpCuODqeODs+ODgOODoDoxIOaYh+mghjoyIOmZjemghjozIDEK44OH44O844K/5pWwOiAxMArmr5TovIM6IDQ1IOWbniDkuqTmj5s6IDIwIOWbngoKKOOCveODvOODiOODhuODs+ODl+ODrOODvOODiCkKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgoKdm9pZCBzb3J0KGludCAqZGF0YSwgaW50IG4pOwoKaW50IGNvbXBhcmUoaW50IGEsIGludCBiKTsKCnZvaWQgc3dhcChpbnQgKmQsIGludCBhLCBpbnQgYik7Cgp2b2lkIGluaXRSYW5kRGF0YShpbnQgKmQsIGludCBuKTsKCnZvaWQgaW5pdEFzY2VuZGluZ0RhdGEoaW50ICpkLCBpbnQgbik7Cgp2b2lkIGluaXREZXNjZW5kaW5nRGF0YShpbnQgKmQsIGludCBuKTsKCnZvaWQgcHJpbnRkYXRhKGludCAqZCwgaW50IG4pOwoKCnVuc2lnbmVkIGxvbmcgY291bnRlclN3YXA7CnVuc2lnbmVkIGxvbmcgY291bnRlckNvbXA7CgoKCgp2b2lkIHNvcnQoaW50IGRhdGFbXSwgaW50IG4pCnsKCS8qIOOBk+OBk+OBq+OCveODvOODiOODl+ODreOCsOODqeODoOOCkuS9nOaIkCAqLwp9CgoKCmludCBtYWluKHZvaWQpCnsKCWludCAqZGF0YTsKCWludCBuOwoJaW50IGk7CglpbnQgY29tOwoJdm9pZCAoKiBpbml0RGF0YVszXSkoaW50ICpkLCBpbnQgeCkgPSB7aW5pdFJhbmREYXRhLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdEFzY2VuZGluZ0RhdGEsCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0RGVzY2VuZGluZ0RhdGEgfTsKCglkbyB7CgkJcHJpbnRmKCLjg4fjg7zjgr/jgr/jgqTjg5coMS0zKVxuIik7CgkJcHJpbnRmKCLjg6njg7Pjg4Djg6A6MSDmmIfpoIY6MiDpmY3poIY6MyAgIik7CgkJc2NhbmYoIiVkIiwgJmNvbSk7Cgl9IHdoaWxlICghIChjb209PTB8fGNvbT09MXx8Y29tPT0yfHxjb209PTMpKTsKCglwcmludGYoIuODh+ODvOOCv+aVsDogIik7CglzY2FuZigiJWQiLCAmbik7CgoJZGF0YSA9IChpbnQqKSBtYWxsb2Moc2l6ZW9mKGludCkgKm4pOwoJaWYgKGNvbT09MCkgewoJCWZvciAoaT0wOyBpPG47IGkrKykgewoJCQlzY2FuZigiJWQiLCAmZGF0YVtpXSk7CgkJfQoJfSBlbHNlIHsKCQlpbml0RGF0YVtjb20tMV0oZGF0YSwgbik7Cgl9CgojaWZkZWYgREVCVUcKCXByaW50ZGF0YShkYXRhLCBuKTsKI2VuZGlmCgoJY291bnRlclN3YXAgPSAwOwoJY291bnRlckNvbXAgPSAwOwoKCXNvcnQoZGF0YSwgbik7CgojaWZkZWYgREVCVUcKCXByaW50ZGF0YShkYXRhLCBuKTsKI2VuZGlmCgoJcHJpbnRmKCIg5q+U6LyDOiAlZCDlm55cbiIsIGNvdW50ZXJDb21wKTsKCXByaW50ZigiIOS6pOaPmzogJWQg5ZueXG4iLCBjb3VudGVyU3dhcCk7CgoJcmV0dXJuIDA7Cn0KCmludCBjb21wYXJlKGludCBhLCBpbnQgYikKewoJY291bnRlckNvbXArKzsKCXJldHVybiAoYTxiKTsKfQoKdm9pZCBzd2FwKGludCAqZCwgaW50IGEsIGludCBiKQp7CglpbnQgdG1wOwoKCWNvdW50ZXJTd2FwKys7Cgl0bXAgPSBkW2FdOwoJZFthXSA9IGRbYl07CglkW2JdID0gdG1wOwp9Cgp2b2lkIGluaXRSYW5kRGF0YShpbnQgKmQsIGludCBuKQp7CglpbnQgaSwgczsKCXNyYW5kKHRpbWUoTlVMTCkpOwoJcz1uKjEwOwoJZm9yKGk9MDsgaTxuOyBpKyspIGRbaV09cmFuZCgpJXM7Cn0KCnZvaWQgaW5pdEFzY2VuZGluZ0RhdGEoaW50ICpkLCBpbnQgbikKewoJaW50IGk7Cglmb3IoaT0wOyBpPG47IGkrKykgIGRbaV09aTsKfQoKdm9pZCBpbml0RGVzY2VuZGluZ0RhdGEoaW50ICpkLCBpbnQgbikKewoJaW50IGk7Cglmb3IoaT0wOyBpPG47IGkrKykgIGRbaV09bi1pLTE7Cn0KCnZvaWQgcHJpbnRkYXRhKGludCAqZCwgaW50IG4pCnsKCWludCBpOwoKCWZvciAoaT0wOyBpPG47IGkrKykgcHJpbnRmKCIlZCAiLCBkW2ldKTsKCXByaW50ZigiXG4iKTsKfQoK
Main.java:1: error: illegal character: \65308
??????????????
^
Main.java:1: error: illegal character: \65310
??????????????
^
Main.java:4: error: illegal character: \65306
???
^
Main.java:9: error: illegal character: \65306
???????
^
Main.java:18: error: illegal character: \8211
bcc32 ?DDEBUG sort.c
^
Main.java:28: error: illegal character: \35
#include <stdio.h>
^
Main.java:29: error: illegal character: \35
#include <stdlib.h>
^
Main.java:30: error: illegal character: \35
#include <malloc.h>
^
Main.java:34: error: class, interface, or enum expected
int compare(int a, int b);
^
Main.java:36: error: class, interface, or enum expected
void swap(int *d, int a, int b);
^
Main.java:38: error: class, interface, or enum expected
void initRandData(int *d, int n);
^
Main.java:40: error: class, interface, or enum expected
void initAscendingData(int *d, int n);
^
Main.java:42: error: class, interface, or enum expected
void initDescendingData(int *d, int n);
^
Main.java:44: error: class, interface, or enum expected
void printdata(int *d, int n);
^
Main.java:47: error: class, interface, or enum expected
unsigned long counterSwap;
^
Main.java:48: error: class, interface, or enum expected
unsigned long counterComp;
^
Main.java:53: error: class, interface, or enum expected
void sort(int data[], int n)
^
Main.java:63: error: class, interface, or enum expected
int n;
^
Main.java:64: error: class, interface, or enum expected
int i;
^
Main.java:65: error: class, interface, or enum expected
int com;
^
Main.java:66: error: class, interface, or enum expected
void (* initData[3])(int *d, int x) = {initRandData,
^
Main.java:70: error: class, interface, or enum expected
do {
^
Main.java:72: error: class, interface, or enum expected
printf("????:1 ??:2 ??:3 ");
^
Main.java:73: error: class, interface, or enum expected
scanf("%d", &com);
^
Main.java:74: error: class, interface, or enum expected
} while (! (com==0||com==1||com==2||com==3));
^
Main.java:76: error: class, interface, or enum expected
printf("????: ");
^
Main.java:77: error: class, interface, or enum expected
scanf("%d", &n);
^
Main.java:79: error: class, interface, or enum expected
data = (int*) malloc(sizeof(int) *n);
^
Main.java:80: error: class, interface, or enum expected
if (com==0) {
^
Main.java:81: error: class, interface, or enum expected
for (i=0; i<n; i++) {
^
Main.java:81: error: class, interface, or enum expected
for (i=0; i<n; i++) {
^
Main.java:83: error: class, interface, or enum expected
}
^
Main.java:86: error: class, interface, or enum expected
}
^
Main.java:88: error: illegal character: \35
#ifdef DEBUG
^
Main.java:90: error: illegal character: \35
#endif
^
Main.java:92: error: class, interface, or enum expected
counterSwap = 0;
^
Main.java:93: error: class, interface, or enum expected
counterComp = 0;
^
Main.java:95: error: class, interface, or enum expected
sort(data, n);
^
Main.java:97: error: illegal character: \35
#ifdef DEBUG
^
Main.java:97: error: class, interface, or enum expected
#ifdef DEBUG
^
Main.java:99: error: illegal character: \35
#endif
^
Main.java:101: error: class, interface, or enum expected
printf(" ??: %d ?\n", counterComp);
^
Main.java:102: error: class, interface, or enum expected
printf(" ??: %d ?\n", counterSwap);
^
Main.java:104: error: class, interface, or enum expected
return 0;
^
Main.java:105: error: class, interface, or enum expected
}
^
Main.java:110: error: class, interface, or enum expected
return (a<b);
^
Main.java:111: error: class, interface, or enum expected
}
^
Main.java:117: error: class, interface, or enum expected
counterSwap++;
^
Main.java:118: error: class, interface, or enum expected
tmp = d[a];
^
Main.java:119: error: class, interface, or enum expected
d[a] = d[b];
^
Main.java:120: error: class, interface, or enum expected
d[b] = tmp;
^
Main.java:121: error: class, interface, or enum expected
}
^
Main.java:126: error: class, interface, or enum expected
srand(time(NULL));
^
Main.java:127: error: class, interface, or enum expected
s=n*10;
^
Main.java:128: error: class, interface, or enum expected
for(i=0; i<n; i++) d[i]=rand()%s;
^
Main.java:128: error: class, interface, or enum expected
for(i=0; i<n; i++) d[i]=rand()%s;
^
Main.java:128: error: class, interface, or enum expected
for(i=0; i<n; i++) d[i]=rand()%s;
^
Main.java:129: error: class, interface, or enum expected
}
^
Main.java:134: error: class, interface, or enum expected
for(i=0; i<n; i++) d[i]=i;
^
Main.java:134: error: class, interface, or enum expected
for(i=0; i<n; i++) d[i]=i;
^
Main.java:134: error: class, interface, or enum expected
for(i=0; i<n; i++) d[i]=i;
^
Main.java:135: error: class, interface, or enum expected
}
^
Main.java:140: error: class, interface, or enum expected
for(i=0; i<n; i++) d[i]=n-i-1;
^
Main.java:140: error: class, interface, or enum expected
for(i=0; i<n; i++) d[i]=n-i-1;
^
Main.java:140: error: class, interface, or enum expected
for(i=0; i<n; i++) d[i]=n-i-1;
^
Main.java:141: error: class, interface, or enum expected
}
^
Main.java:147: error: class, interface, or enum expected
for (i=0; i<n; i++) printf("%d ", d[i]);
^
Main.java:147: error: class, interface, or enum expected
for (i=0; i<n; i++) printf("%d ", d[i]);
^
Main.java:147: error: class, interface, or enum expected
for (i=0; i<n; i++) printf("%d ", d[i]);
^
Main.java:148: error: class, interface, or enum expected
printf("\n");
^
Main.java:149: error: class, interface, or enum expected
}
^
71 errors