史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   一個C++結構化設計的問題 (http://forum.slime.com.tw/thread192169.html)

m7225 2006-11-25 12:28 AM

一個C++結構化設計的問題
 
請注意看顯示的氣泡排序法在處理大型陣列時,其效率會很差。請執行以下簡單的修正,以便改進氣泡排序法的效率:
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點
我下禮拜二要交@@


所有時間均為台北時間。現在的時間是 07:21 AM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1