程式改錯之分塊查詢

2021-09-26 02:00:17 字數 2448 閱讀 2421

錯誤**:

#include #define maxsize 100

typedef struct

indexelem;

indexelem index[maxsize];

int indexsearch(indexelem index,int m,int r,int n,int key)

i = index[high + 1].low;

while(i<=index[high+1].high)

if(index[i].key == key)

return i;

return 0;

}int getmax(int r,int low,int high)

int main()

; int n = 8;

int m = 0,i,j,k,key = 13,step = 2;

//建立索引

if(n <= step)

else

if(n%step != 0)

}j = indexsearch(index,m,r,n,key);

if(j == 0)

printf("failure!");

else

printf("%d is %dth number",r[j],j+1);

system("pause");

return 0;

}

錯誤批改:

#include #define maxsize 100

typedef struct

indexelem;

indexelem index[maxsize];

int indexsearch(indexelem index,int m,int r,int n,int key)

i = index[high + 1].low;

while(i<=index[high+1].high)

if(index[i].key == key)//r[i]

return i;//缺少迴圈變數的遞加,造成死迴圈,應增加語句i++

return 0;

}int getmax(int r,int low,int high)

int main()

; int n = 8;

int m = 0,i,j,k,key = 13,step = 2;

//下面這一塊**實際理解錯了分塊查詢的條件,首先r陣列分成的字塊要分塊有序

//所謂分塊有序指的是第二個子表的所有關鍵字要大於第乙個子表最大的關鍵字

//正確的方法為讓其合法的輸入乙個陣列r,然後再進行分塊

//定義兩個變數start=0和end=1當end<=n-1時做乙個迴圈:

//當end比start所指的陣列元素大時,low=start,high=end-1

//退出迴圈當start <= n-1時,將r陣列剩下的元素併入即可

//當然方法有很多,即使是不合法輸入的r也可以分塊成合法的只需要增加條件r[end]大於前乙個子表中最大的元素,

//如果小於則停止分塊結束,並提示輸入不合法

//建立索引

if(n <= step)

else

if(n%step != 0)

j = indexsearch(index,m,r,n,key);

if(j == 0)

printf("failure!");

else

printf("%d is %dth number",r[j],j+1);

system("pause");

return 0;

}

正確**:

#include #include #define maxsize 100

typedef struct

indexelem;

int indexsearch(indexelem index, int m, int r, int n, int key)

i = index[high + 1].low;

while (i <= index[high + 1].high)

return 0;

}int main()

; int n = 18;

int m = 3, i, j, key = 12;

//建立索引

indexelem index[maxsize] = ,, };

j = indexsearch(index, m, r, n, key);

if (j == 0)

printf("failure!");

else

printf("%d is %dth number", r[j], j + 1);

system("pause");

return 0;

}

查詢之分塊查詢

分塊查詢又稱索引順序查詢,吸取順序查詢和折半查詢的優點 基本思想 將查詢表分為若干個子塊。塊內的元素可以無序,但塊件是有序的,即第乙個塊中的最大關鍵字小於第二塊中的所有關鍵字,依次類推。再建乙個索引表,索引表中的元素含有各塊的最大關鍵字和各塊中第乙個元素的位址,索引表按關鍵字有序排列。示意圖 查詢分...

查詢演算法之分塊查詢

演算法思想 1.將n個資料元素 按塊有序 劃分為m塊 m n 2.每一塊中的結點不必有序,但塊與塊之間必須 按塊有序 3.即第1塊中任一元素的關鍵字都必須小於第2塊中任一元素的關鍵字 4.而第2塊中任一元素又都必須小於第3塊中的任一元素,分塊查詢是折半查詢和順序查詢的一種改進方法,分塊查詢由於只要求...

資料結構 靜態查詢之分塊查詢

分塊查詢 分塊查詢,也稱索引順序查詢,是一種折半查詢和順序查詢的改進方法。思想 把線性表分成若干塊,每塊包含若干個元素 塊內無序,塊間有序。建立乙個索引表,把每塊中的最大關鍵字值和每塊的第乙個元素在表中的位置和最後乙個元素在表中的位置存放在索引項中。先確定待查資料元素所在的塊,然後再塊內順序查詢 如...