C言語探索プログラムについて質問です。
#include <stdio.h>
#define MAXSIZE 100
void swapData(int *x, int *y){
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
void simpleSort(int data[], int first, int last)
{
int i, j;
for(i = first; i < last; i++){
for(j = i+1; j <= last; j++){
if(data[i] > data[j]) {
swapData(&data[i], &data[j]);
}
}
}
}
int ArrayBinarySearch(int data[], int n, int x)
{
int left = 0, right = n - 1, center;
while(left <= right){
center = (left + right)/2;
if(data[center]=x){
return center;
}else if(x > data[center]){
left = center + 1;
}else if(x < data[center]){
right = center - 1;
}
}
return -1;
}
int main(int argc, char *argv[])
{
int data[MAXSIZE];
int i, x;
FILE *fp;
scanf("%d", &x);
fp = fopen(argv[1], "r");
for(i = 0; i < MAXSIZE; i++)
{
if (fscanf(fp,"%d", &data[i]) == EOF)
break;
}
simpleSort(data, 0, i-1);
printf("%d", ArrayBinarySearch(data, i, x ));
return 0;
}
数値が書かれたファイルを読み込んでソートした後に二分探索を行うプログラムをつくったのですが、うまく動きません。
どこがおかしいか教えてください。
お願いいたします。
ちなみに関数ArrayBinarySearchは目的の値が見つかれば配列中でのインデックスを、見つからない場合は-1を返す関数にしているつもりです。
No.1ベストアンサー
- 回答日時:
int ArrayBinarySearch(int data[], int n, int x)
{
int left = 0, right = n - 1, center;
while(left <= right){
center = (left + right)/2;
if(data[center]=x){ /* ココ */
return center;
}else if(x > data[center]){
left = center + 1;
}else if(x < data[center]){
right = center - 1;
}
}
これだとXの値を代入して、そのXの値でif文を判定してしまいます。
正しくは
if(data[center]==x){
です。まぁ、よくある間違いですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
【C++】関数ポインタの使い方
-
比較回数と交換回数表示について
-
C言語で三目並べをするプログラ...
-
if と配列の組み合わせ
-
商と剰余を同時に求める(C言語)
-
C言語での奇数の和
-
ラップ関数とはどんなものですか?
-
Arduinoのプログラムにエラーが...
-
C言語
-
並列プログラミングのπ計算につ...
-
C言語 エラーの原因がわからな...
-
インライン展開されているか確...
-
GlobalAllocの変数を関数に引き...
-
HANDLEて何ですか?
-
read関数をノンブロッキングで...
-
C++でvectorにテキストファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 配列と関数の練習問題
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
c言語
-
足して100になるような乱数のア...
-
C言語初心者です、、、お助けく...
-
数字列を3桁ごとにカンマで区切...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
課題でつまってます・・・
-
商と剰余を同時に求める(C言語)
-
C言語の配列をC++のvectorに高...
-
std::set<int> で、ある値が何...
おすすめ情報