一個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點
我下禮拜二要交@@
|