ソートの移動回数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mai

ソートの移動回数

#1

投稿記事 by mai » 14年前

Linux
gcc


ランダムになっている整数をソートするプログラムを作っていて、その際、ソートするために移動した回数を数えたいのですが、どこで回数をカウントすれば良いかが分かりません。
関数は、バブルソートとクイックソートです。
よろしくお願いします。

コード:

void buble_sort(int size, int *array){
        int i, x, j;

        for(i = 0; i < size; i++){
          for(j = size - 1; j > i; --j){
            if(array[j - 1] >= array[j]){
               x = array[j - 1];
               array[j - 1] = array[j];
               array[j] = x;
           }
         }
       }
      return ;


void quick_sort(int low, int high, int *array){
       int i, j, mid, tmp;
       i = low;
       j = high;
       mid = array[(low + high) / 2];
       do{
           while(array[i] < mid)
              i++;
           while(x < array[j])
              j--;
           if(i <= j){
              tmp = array[i];
              array[i] = array[j];
              array[j] = tmp;
              i++;
              j--;
          }
      } while(i <= j);
      if(low < j)
         quick_sort(low, j, array);
      if(i < high)
         quick_sort(i, high, array);
      return ;
}

アバター
GRAM
記事: 164
登録日時: 14年前
住所: 大阪

Re: ソートの移動回数

#2

投稿記事 by GRAM » 14年前

さて、まずは質問ですが
要素の移動とは何を指すのでしょうか?
このプログラムの場合行われているのは単純な移動ではなく要素の交換です
交換の回数を計ればよろしいのですか?それともほんとに要素が移動するたび数えるのですか?

さて、どちらにしても交換が起きている箇所(つまり少なくとも要素が移動している箇所)
では以下の動作をしています

①一時的に要素を保存
②保存の終わった要素にもう一方の要素を代入
③今代入を行った要素に保存しておいた要素を代入(これで交換が終わる)

こういう箇所を探してカウントしてみてください

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: ソートの移動回数

#3

投稿記事 by bitter_fox » 14年前

先日類似の問題に返答しましたので参考にしてください。
http://dixq.net/forum/viewtopic.php?f=3&t=8599

閉鎖

“C言語何でも質問掲示板” へ戻る