![]() |
|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
![]() ![]() |
|
主題工具 | 顯示模式 |
![]() |
#1 |
註冊會員
|
![]() 請注意看顯示的氣泡排序法在處理大型陣列時,其效率會很差。請執行以下簡單的修正,以便改進氣泡排序法的效率:
1.在第一回合中,最大的數目一定會放到陣列最後一個元素的位置,在第二回合之後,這最大的兩個數字就排好了,依此類推。若不想在每回合的比對時,都執行九次的比對動作,你可以修改氣泡排序法,讓它在第二回合比對時,只執行八次的比對動作,在第三回比對時,只執行七次的比對動作,依此類推。 2.如果陣列的資料己經排序好或接近排序好的狀態,則為什麼需要在每回合比對中,執行九回合的比對動作呢?請修改氣泡排序法,在每回合比對之後,檢查程式是否執行了任何的交換操作。如果沒有進行任何的交換動作,則陣列的資料一定己經排序完畢,所以程式就應該終止。如果程式執行過交換的動作,則我們至少需要要再進行一回合的比較。 #include<iostream> using std::cout; using std::end1; #include<iomanip> using std::setw; int man() { const int arraySize = 10; //size of array a int a[arraySize]={2,6,4,8,10,12,89,68,45,37}; int hold; //temporary location used to swap array elements cout<< "Data items in original order\n"; //output original array for (int i=0;i<arraySize; i++) cout<<setw(4)<<a[i]; //bubble sort //loop to control number of passes for (int pass=0; pass<arraySize-1;pass++) //loop to control number of comparisons per pass for (int j=0;j<arraySize-1;j++) //compare side-by-side elements and swap them if //first element is greater than second element if (a[j]>a[j+1]) { hold=a[j]; a[j]=a[j+1]; a[j+1]=hold; }//end if cout <<"\nData items in ascending order\n"; //output sorted array for (int k=0;k<arraySize;k++) cout <<setw(4)<<a[k]; cout<<end1; return 0; //indicates successful termination } //end main Data items in original orger 2 6 4 8 10 12 89 68 45 37 Data items in ascending order 2 4 6 8 10 12 37 45 68 89 如果你會C++結構化設計的話,請你幫我寫,謝謝^^ 我會送給20點 我下禮拜二要交@@ |
![]() |
送花文章: 0,
![]() |