資源簡介
1.寫一個“由底向上”的歸并分類排序算法。
2.用快速分類算法對10個數(鍵盤輸入)進行從大到小或從小到大的排列并輸出結果。

代碼片段和文件信息
#include
#include
using?namespace?std;
void?combine(int?*intintint);
void?mergesort(int?*sortarrayint?lowint?high)
{
int?k=(low+high)/2;
if(low {
mergesort(sortarraylowk);//對low到k的前半段進行歸并排序
mergesort(sortarrayk+1high);//對k+1到high的后半段進行歸并排序
combine(sortarraylowkhigh);//把有序的low->k和k+1->high這兩段合并到low到high
}
}
//把有序的兩段數組合并為一段數組,并使合并這段數組同樣有序
void?combine(int?*sortarrayint?lowint?kint?high)
{
vector?temp(high-low+10);?//temp是輔助存儲數組,輔助存儲當前排好序的狀態
int?ijp;
i=low;//控制前半段下標移動
j=k+1;//控制后半段下標移動
p=0;?//控制temp的小標移動
while(i<=k&&j<=high)//但前半段或者后半段的數全部排好序(放入temp數組)時退出
{
if(*(sortarray+i)<*(sortarray+j))??//從小到大排序
{
temp[p]=*(sortarray+i);
i++;
}
else
{
temp[p]=*(sortarray+j);
j++;
}
p++;
}
//把前半段沒有排好序的數排序,放入temp數組
while(i<=k&&j>high)
{
temp[p]=*(sortarray+i);
i++;
p++;
}
//把后半段沒有排好序的數排序,放入temp數組
while(j<=high&&i>k)
{
temp[p]=*(sortarray+j);
j++;
p++;
}
//把temp數組中的數拷貝會需要排序的數組,完成歸并
for(i=0;i {
*(sortarray+low+i)=temp[i];
}
}
int?main()
{
int?sortarray[10]={0};
int?numlowhigh;//num是需要排序的個數,low和high控制排序的數據段
int?i=0;
//freopen(“stdin.txt““r“stdin);
cout<<“請輸入排序的個數:“;
cin>>num;
for(i=1;i<=num;i++)
{
cout<<“請輸入數:“< cin>>*(sortarray+i);
}
cout<<“輸入最小最大的個數:“< cin>>low>>high;
cout<<“初始數據為:“< for(i=1;i<=num;i++)
{
cout<<*(sortarray+i)<<“?“;
}
cout< //進行歸并排序
mergesort(sortarraylowhigh);
cout<<“從小到大排序后的數據為:“< for(i=1;i<=num;i++)
{
cout<<*(sortarray+i)<<“?“;
}
cout< return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????19??2010-05-24?21:00??歸并分類排序\stdin.txt
?????文件???????1275??2010-05-24?20:57??歸并分類排序\快速排序.cpp
?????目錄??????????0??2010-06-12?23:11??歸并分類排序
?????文件???????1929??2010-05-24?21:00??歸并分類排序\guibing.cpp
-----------?---------??----------?-----??----
?????????????????3223????????????????????4
- 上一篇:心形流水燈仿真電路
- 下一篇:JFreeChart實時折線圖
評論
共有 條評論