0

乱数の大規模な配列に対してバブルソートを実行し、そのパフォーマンス時間を確認する必要がある、非常に単純な (または少なくともそうあるべき) 割り当てがあります。次に、配列を半分に分割し、半分を一方のスレッドで、もう一方を別のスレッドでソートし、その方が速いかどうかを確認することを除いて、同じことを行う必要があります。

私はこれまで C を扱ったことがなかったので、ポインタに関しては完全に無知で、Java しか扱っていませんでした。バブルソートを機能させようとしている限り、これが私のコードです。

#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <libgen.h>

int main() {
  int *array[50000];
  for(int i = 0; i < 50000; i++) {
    array[i] = 1;
  }
  bubbleSort(array, 50000);
}

void bubbleSort(int *numbers[], int *array_size) {
  int i, j, temp;
  for(i = (array_size - 1); i > 0; i--) {
    for(j = 1; j <= i; j++) {
  if(numbers[j-1] > numbers[j]) {
    temp = numbers[j-1];
    numbers[j-1] = numbers[j];
    numbers[j] = temp;
      }
    }
  }
  for(int i = 0; i < 10; i++) {
    printf(numbers[i]);
  }
}

ここでやろうとしているのは、配列を並べ替えてから、最初の 10 個の数字を出力して、それが機能していることを確認することだけです。あらゆる種類のポインタ エラーが発生しています。

"bubbleSort.c", line 11: warning: improper pointer/integer combination: op "="
"bubbleSort.c", line 13: warning: implicit function declaration: bubbleSort
"bubbleSort.c", line 16: identifier redeclared: bubbleSort
        current : function(pointer to pointer to int, pointer to int) returning void
        previous: function() returning int : "bubbleSort.c", line 13
"bubbleSort.c", line 18: warning: improper pointer/integer combination: op "="
"bubbleSort.c", line 21: warning: improper pointer/integer combination: op "="
"bubbleSort.c", line 23: warning: improper pointer/integer combination: op "="
"bubbleSort.c", line 28: warning: argument #1 is incompatible with prototype:
        prototype: pointer to const char : "/usr/include/iso/stdio_iso.h", line 206
        argument : pointer to int
cc: acomp failed for bubbleSort.c
4

2 に答える 2

4

これ:

int *array[50000];

へのポインターの 50,000 要素の配列を宣言しますがint、これはおそらくあなたが望むものではありません。を取り外します*

プロトタイプでは、bubbleSort()削除する必要がある偽のアスタリスクもあります。

アスタリスクは C で何かを意味することに注意してください。好きなようにコードをランダムに装飾することは想定されていません。それが何を意味するのか、いつなのかがわからない場合は、これがクラスの場合、いくつかのチュートリアル情報にアクセスできる必要があります。読み始めます。

于 2012-10-02T15:45:19.360 に答える
1

11 行目:宣言する必要はありませんがint *array[]int array[]代わりに
13 行目:関数のプロトタイプを作成するか、メインの上で宣言します
16 行目:宣言しint *array_sizeましたが、メインでそれを指定します 18、21 int
、および 23 行目: 11と同じです。
28行目:可変フォーマット文字列で printf を使用しないでください! printf("%i, ", numbers[i]);方法です。

Cコーディングの基本を本当に確認する必要があります

于 2012-10-02T15:49:18.257 に答える