掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29651

内部アルゴリズムについて
投稿者---minami(2007/01/30 17:49:08)


文字列関数(char *stract(char*,char*))の内部アルゴリズムと、

クイックソート関数(void qsort(void *base, size_t n, size_t size, int(*cmp)(const void*,const void*)))の内部アルゴリズム

について知りたいのですが、解る方いましたらぜひおしえてください。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:内部アルゴリズムについて 29652 YuO 2007/01/30 18:24:44
<子記事> Re:内部アルゴリズムについて 29683 かずま 2007/02/01 20:38:56


No.29652

Re:内部アルゴリズムについて
投稿者---YuO(2007/01/30 18:24:44)


>文字列関数(char *stract(char*,char*))の内部アルゴリズムと、
>クイックソート関数(void qsort(void *base, size_t n, size_t size, int(*cmp)(const void*,const void*)))の内部アルゴリズム
>について知りたいのですが、解る方いましたらぜひおしえてください。

標準はアルゴリズムに関して規定していません。
なので,対象のコンパイラがソースを公開していれば,それを見てください,としか書けません。
特定の処理系についての話であれば,使っている処理系をちゃんと指定してください。



この投稿にコメントする

削除パスワード

No.29683

Re:内部アルゴリズムについて
投稿者---かずま(2007/02/01 20:38:56)


> 文字列関数(char *stract(char*,char*))の内部アルゴリズムと、
> クイックソート関数(void qsort(void *base, size_t n, size_t size,
> int(*cmp)(const void*,const void*)))の内部アルゴリズム
> について知りたいのですが、解る方いましたらぜひおしえてください。

本物は効率なんかも考えて書かれているんでしょうが、そんなことは考えなく
てもいいから、とにかく何らかのサンプルがほしいということでしょうか?

stract は strcat の間違いですね?
#include <stdio.h>

char *strcat(char *s1, const char *s2)
{
    char *p = s1;
    while (*p) p++;
    while (*p++ = *s2++) ;
    return s1;
}

static void swap(void *a, size_t i, size_t j, size_t size)
{
    char t, *p = (char *)a+i*size, *q = (char *)a+j*size;
    while (size--) t = *p, *p++ = *q, *q++ = t;
}

void qsort(void *a, size_t n, size_t size,
        int (*comp)(const void *, const void *))
{
    size_t i, last = 0;
    if (n <= 1) return;
    for (i = 1; i < n; i++)
        if (comp((char *)a+i*size, a) < 0) swap(a, ++last, i, size);
    swap(a, 0, last, size);
    qsort(a, last, size, comp);
    qsort((char *)a+last+1, n-last-1, size, comp);
}

int icomp(const void *a, const void *b)
{
    int x = *(int *)a, y = *(int *)b;
    return x < y ? -1 : x > y;
}

int main(void)
{
    int i, a[] = { 3, 1, 4, 2, 5 };
    char s[20] = "abc";
    puts(strcat(s, "xyz"));

    qsort(a, 5, sizeof(int), icomp);
    for (i = 0; i < 5; i++) printf(" %d", a[i]);
    printf("\n");
    return 0;
}



この投稿にコメントする

削除パスワード

No.29697

Re:内部アルゴリズムについて
投稿者---かずま(2007/02/02 11:25:00)


>   qsort((char *)a+last+1, n-last-1, size, comp);

訂正
    qsort((char *)a+(last+1)*size, n-last-1, size, comp);



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧