jasonh920
|
分享:
▼
x0
|
[C/C++] [求助]學校的作業寫不出來,關於泡沫排序法和二分搜尋法的程式
請問各位大大幫一下小弟. 這次作業想破了頭,就是不知道如何下手. 眼睜睜看著交作業的時間又要到了. 所以想請各位大大幫忙小弟,要不然真不知道 這個程式要如何作壓.... 麻煩各位大大們了.... 一. 自訂一個數列(陣列)使用泡沫排序法進行排序動作 二. 將第一點排序完成的數列使用二分搜尋法進行搜尋動作 三. 一、二點功能需加入狀態追蹤 四. 將一、二點寫成函式的形態 五 .執行範例如 圖二、三、四、五 函式格式與說明 void print(int array[] , int length); //自訂列印陣列函數 void bubble_sort(int bubble[] , int length , int control); //泡沫排序 int binary_search(int binary[] ,int length , int search , int low_limit ,int up_limit , int control); //二分搜尋法 參數說明 int array[] 欲列印陣列 ; int lenght 欲列印陣列長度 int bubble[] 欲排序陣列 ; int lenght 欲排序陣列長度 ; int control 追蹤控制變數 int binary[] 欲搜尋陣列 ; int lenght 欲搜尋陣列長度 ; int search 欲搜尋的數值 ; int up_limit 二分法搜尋初始上限 ; int low_limit 二分法搜尋初始下限 ; int control 追蹤控制變數 #include <cstdlib> #include <iostre .. 訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容
|
|
x0
[樓 主]
From:局域網對方和您在同一內部網
| Posted:2005-03-25 13:44 |
|
|
唐老鴨
|
分享:
▲
▼
下面是引用jasonh920於2005-03-25 13:44發表的 [求助]學校的作業寫不出來,關於泡沫排序法和二分搜尋法的程式: 請問各位大大幫一下小弟. 這次作業想破了頭,就是不知道如何下手. 眼睜睜看著交作業的時間又要到了. 所以想請各位大大幫忙小弟,要不然真不知道 這個程式要如何作壓.... ....... 看來你不是很聽的懂我的意思..... 首先.... 我的第一個問題是 int value[size]={57,19,33,26,6};你是要用給好的這五個數來排就好....還是要由使用者來輸入一些數字....之後再將這些數做排列.... 第二....你宣告 int array[size];是要拿來做什麼用的..... 第三....你的題目 "三. 一、二點功能需加入狀態追蹤"你所要做的是什麼.....不是很懂她的意思....是說要將每一次的排序(譬如排了十次才排好)...分別列他的進度做到哪嗎..... 最後一點.....照你的程式....如果你的輸入是A....就做bubble_sort(normal)...如果是B....就做bubble_sort(detail)....我不知道他的差別在哪....因為我就只知道一種bubble sort的演算法....不知道bubble sort還有分你要用normal的排列....還是detail的排列....不然你的程式裡....你的"control"我可能用不到....所以選A跟選B都是一樣的....當然binary_serach也是同樣的問題....這才是我想問你的.....
[ 此文章被唐老鴨在2005-03-26 03:56重新編輯 ]
|
|
唐老鴨
|
分享:
▲
▼
下面是引用jasonh920於2005-03-26 01:15發表的 : "//程式碼"的部份是老師要我們填進自己程式的部份. 或者是"完成的方式不限制 (除了互抄) 不一定要用我的 主程式,但函式定義一定要一樣(函數名稱)"就可以了.
但我卻是想了好幾天都猜不透要如何去解. 麻煩大大您了... 其實我是覺得真的很難啦!!因為我邏輯觀念實 在是不怎麼好... 而且現在又是隨修,根本就沒有同學可以討論. 老師又揚言要當至少二十個以上... 真是快哭出來了..... 如果說上面的主程式是你寫的.... 那我會改掉大部分的部份.... 用我自己的想法來寫.... 但如果那是老師的版本.... 那上面那篇留言.... 有蠻多問題要問你的.... 所以你先告知你真正的題目要求.... 我在來給你內容..... 基本上那兩個函式的部份不會超過二十行..... 不過作業還是要自己寫比較好.... 有學到才重要 .....
|
|
唐老鴨
|
分享:
▲
▼
我照妳們老師的要求寫好了....只有一點點改變而已....剩下完全是照妳們老師的圖做的..... 這是程式碼...... 複製程式
#include <cstdlib>
#include <iostream>
using namespace std;
void print(int array[] , int length);//自訂列印陣列函數
void bubble_sort(int bubble[] ,int length , int control); //泡沫排序
int binary_search(int binary[] , int length , int search , int low_limit ,int up_limit , int control);//二分搜尋法
int main(int argc, char *argv[])
{
const int size = 5;//自訂長度
int value[size]={57,19,33,26,6}; //自訂數列
//int array[size]; //我沒用到這個
int i=0 , j=0;
int find_value=0;
int select=0;
char determine;
printf("Select mode : a.bubble_sort(normal) B.bubble_sort(detail) C.Binary_search(normal) D.Binary_search(detail)\n");
scanf("%c",&determine);
if(determine == 'A' || determine == 'a')
{
select= 0;
printf("array value : ");
print (value,size);
bubble_sort(value,size,select);
}
else if(determine== 'B' || determine == 'b')
{
select=1;
printf("array value : ");
print(value,size);
bubble_sort(value,size,select);
}
else if(determine == 'C' || determine == 'c')
{
select=0;
printf("array value : ");
print(value,size);
printf("enter search value :\n");
scanf("%d",&find_value);
bubble_sort(value,size,select);
binary_search(value ,size ,find_value ,0 ,size-1 ,select);
}
else if (determine == 'D' || determine == 'd')
{
select=1;
printf("array value : ");
print(value,size);
printf("enter search value :\n");
scanf("%d",&find_value);
bubble_sort(value,size,select);
binary_search(value ,size , find_value ,0 ,size-1 ,select);
}
system("PAUSE");
return 0;
}
void bubble_sort(int bubble[] , int length , int control)
{
int i,j;
int temp;
for(i=0; i<length-1; i++)
{
for(j=i+1; j < length; j++)
{
if(control==1)
{
printf("%3d%3d\n",i,j);
printf("%3d%3d\n",bubble[i],bubble[j]);
printf("array value : ");
print(bubble,length);
}
if(bubble[i]>bubble[j])
{
if(control==1)
{
printf("%3d%3d exchange\n",bubble[i],bubble[j]);
}
temp=bubble[j];
bubble[j]=bubble[i];
bubble[i]=temp;
if(control==1)
{
printf("array value : ");
print(bubble,length);
}
}
}
}
if(control==0)
{
printf("array value : ");
print(bubble,length);
}
}
int binary_search(int binary[] ,int length ,int search , int low_limit , int up_limit , int control)
{
int middle;
int find=0;
while(low_limit<=up_limit)
{
middle=(low_limit+up_limit)/2;
if(control==1)
{
printf("\nup_limit = %d\n",binary[up_limit]);
printf("low_limit = %d\n",binary[low_limit]);
printf("midpoint = %d\n",binary[middle]);
printf("search = %d\n",search);
printf("\n");
}
if(search>binary[middle])
low_limit=middle+1;
else if(search<binary[middle])
up_limit=middle-1;
else if(search==binary[middle])
{
find=1;
break;
}
}
if(find==1)
printf("Find %d\n",search);
else
printf("No Find %d\n",search);
return find;
}
void print(int array[] , int length)
{
int i=0;
for(i=0 ; i<length ; i++)
{
printf("%3d",array[i]);
}
printf("\n");
}
|
|
|