C 二分法查詢檔案中的某個資料

2021-08-19 20:13:58 字數 2216 閱讀 1151

1:題目:

(1):二分法查詢檔案中的某個資料。存在:返回行數,不存在,返回-1。

(2):檔案中的資料存放要求:

檔案中存放的是遞增的整數,且每行乙個數。

如: info.txt

2 6

16 28

49 50

56 85

88 90

99 100

256

(3)輸入輸出要求

輸入:檔名fname、待查詢的整數key

輸出:存在:返回行數,不存在,返回-1

2、思路

直接用二分法進行操作。

不額外申請多餘的記憶體,複製檔案中所有的資料。

直接用檔案指標操作到對應位置,用對應位置的值,進行比較操作。

如:想要取到檔案中間的值:

in.seekg(0, 2);//將檔案指標定位到檔案末尾,以便獲取檔案的行數

int len = in.tellg() / sizeof(int);//len:檔案的行數

int mid = len / 2;

//--------獲取 檔案中間位置 mid 的資料 begin-------

char *buffer;

int size = sizeof(int);//由於檔案中所有資料都是int型的整數,所以每取乙個數的大小都是 sizeof(int)

buffer = new

char[size];

in.seekg(sizeof(int)*mid); //將檔案指標定位到 檔案中間mid的位置

in.read(buffer, size); //將mid位置的資料存入char* 中

string str = buffer; //將 char* 轉換為 string

delete buffer;

int mid_value = atoi(str.c_str()); //將 string 轉換為 int

//--------獲取 檔案中間位置 mid 的資料 end-------

自己想的,不太好,

獲取到特定位置的值之後,需要進行兩次資料格式的轉換,

(1)將 char* 轉換為 string

(2)將 string 轉換為 int

繁瑣 !! !!

有好方法的,冒個泡吧。。

3、**:

int binarysearchvalueinfile(char *fname, int key)

in.seekg(0, 2);//將檔案指標定位到檔案末尾,以便獲取檔案的行數

int len = in.tellg() / sizeof(int);//len:檔案的行數

//---------------------二分法 begin---------------------

int low = 1;

int high = len;

int mid = (low + high) / 2;

while (low <= high)

//---------------------二分法 end---------------------

in.close();

return -1;

}

檢測**:

#include

#include

#include

using

namespace

std;

void test()

; for (auto c : a)

cout

<< c << " row: "

<< binarysearchvalueinfile(fname, c) << endl;

cout

<< endl;

}int main()

3、不足之處

1、最開始的兩個資料 和 最後乙個資料 總是查詢不出來。

2、獲取到特定位置的值之後,需要進行兩次資料格式的轉換,

(1)將 char* 轉換為 string

(2)將 string 轉換為 int

繁瑣 !!

路過的大俠有想法,望不吝賜教!

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

二分法查詢資料

首先你儲存的資料內容必須是有序的 其次找到中間值 然後將你想要的查詢的值進行對比 如果比他大就去右邊尋找 反之就往左邊尋找 public static void main string args scanner b newscanner system.in system.out.println 請輸...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...