English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

如題....
程式碼如下(有標題):
請各位先進幫幫我改一改(程式可執行,為陣列值非亂數,想取亂數並二元搜尋)
感恩...
#include
#include
#define Size 8
#define true 1

void print_array_data(int *d, int n);
int binary_search(int *d, int low_index, int high_index,
int key, int *index);

/*--------------------*/
/* 列印陣列元素值 */
/*--------------------*/
void print_array_data(int *d, int n)
{
int i ;

printf("陣列元素 d[0] [1] [2] [3] [4] [5] [6] [7] \n");
printf("------------------------------------------\n");
printf("鍵 值 ==>");
for(i = 0; i < n; i++){
printf("%3d ",d[i]);
}
printf("\n\n");
}

/*----------------*/
/* 二元搜尋法 */
/*----------------*/
int binary_search(int *d, int low_index, int high_index,
int key, int *index)
{
int i, middle, count;

if(d[low_index] > key || d[high_index] < key ) /* not found */
return (-1);

count=-1;
while(low_index <= high_index){
middle = (low_index + high_index)/2;
if(key > d[middle])
low_index = middle + 1; /* 下一回合須搜尋後半部 */
else{
if(key < d[middle])
high_index = middle - 1; /* 下一回合須搜尋前半部 */

else{ /* key == d[middle] */
index[++count] = middle; /* 找到了 */
/* 須再比較前後筆鍵值是否相同 */

i = middle - 1;
while(i >= low_index && key == d[i]) /* 比較前面幾筆是否同鍵值 */
index[++count] = i--;

i = middle + 1;
while(i <= high_index && key == d[i]) /* 比較後面幾筆是否同鍵值 */
index[++count] = i++;

return (count);
}
}
}
return (-1);
}

main(void)
{

int d[Size]={14, 33, 48, 50, 87, 93, 120, 121}; /* 已遞增排序 */
int key;
int i, count=-1; /* 共有多少筆資料滿足搜尋條件 */
int index[Size]; /* 儲存滿足條件之鍵值之索引位值 */


while(true){
print_array_data(d, Size);
printf("請輸入要搜尋的鍵值(結束時輸入-1) : ");
scanf("%d",&key);
if(key == -1) break;
else;

count = binary_search(d, 0, Size-1, key, index);

if(count > -1){
for(i = 0; i <= count; i++)
printf("\n在 d[%d] 找到了鍵值 %d!",index[i],key);
printf(" ==>共找到 %d 筆!\n\n",count+1);
}
else
printf("\n==>找不到鍵值 %d !\n\n",key);
}
}

2005-05-20 01:52:34 · 3 個解答 · 發問者 Anonymous in 電腦與網際網路 程式設計

3 個解答

做出亂數陣列的函式 :
int* ran_array(int *ptr, int size)
{
ptr=new int[size];
srand(time(0));
for (int i=0; i *(ptr+i)=rand();
return ptr;
}

2005-05-20 19:50:41 · answer #1 · answered by Anonymous · 0 0

我猜他應該是要取亂數塞到array中,然後在做sort吧..我猜

2005-05-20 13:52:39 · answer #2 · answered by 阿阿憲 1 · 0 0

亂數無法做二分搜尋法,必須先排序後才能執行二分搜尋法

2005-05-20 06:49:07 · answer #3 · answered by ? 7 · 0 0

fedest.com, questions and answers