資源簡介
利用隨機函數產生N個隨機整數(20000以上),對這些數進行多種方法進行排序
代碼片段和文件信息
#include
#include
#include//常用函數
#include
#include
#include//格式化輸出
using?namespace?std;//聲明了名字空間std有關函數和變量都可以直接調用而不需要在前面加域運算符“::“比如沒有這句的話輸出語句如下:std::cout<<a<<std::endl
int?compare[7]change[7]move[7];??//compare數組是比較次數,change數組是交換次數,move數組是移動次數
class?SortableSList??
{
????public:
????????SortableSList();
????????void?Reload();???????//初始數據函數
????????void?Save_File();????//保存信息
????????void?InsertSort();???//直接插入排序
????????void?SelectSort();???//簡單選擇排序
????????void?BubbleSort();???//冒泡排序
????????void?QuickSort();????//快速排序
????????void?ShellSort();????//希爾排序
????????void?HeapSort();???//堆排序
????????void?MergeSort();????//兩路合并排序
????????void?QuickSort(int?leftint?right);?
????????void?PrintBeforeSort();
????????void?PrintAfterSort();
????private:
????????int?Partition(int?leftint?right);
????????void?InsSort(int?h);
????????void?Merge(int?leftint?midint?right);
????????void?Min(int?i);
????????int?*l;?????????
????????int?n;
????????int?*randarray;
};
SortableSList::SortableSList()
{
?cout<<“?|????????????????????請你輸入要排序的數字個數??n?:“;
?cin>>n;//輸入要生成隨機數的個數
?cout<<“?|????????????????????????????????????????????????????????????????????????????|“< ?cout<<“?|----------------------------------------------------------------------------|“< ?cout<<“?|????????????????????????????????????????????????????????????????????????????|“< ?cout<<“?|?請稍等......???????????????????????????????????????????????????????????????|“< ????l=new?int[n];
????randarray=new?int[n];
????for(int?i=0;i ??????l[i]=randarray[i]=20000+rand();
}
void?SortableSList::Reload()???//初始數據函數
{
??int?i;
??for(i=0;i ??l[i]=randarray[i];
}
void?SortableSList::Save_File()?//保存信息
{
????int?i;
????ofstream?ofile(“排序.txt“);//如果文件不存在,則新建一個文件
????for(i=0;i ????????ofile< ????ofile.close();
????
}
//~~~~~~~~~~~~~~~直接插入排序~~~~~~~~~~~~~~~~~~~
void?SortableSList::InsertSort()
{???
?int?ij;
????for(i=1;i ????????int?x=l[i];
????????move[0]++;
????????for(j=i-1;j>=0&&x ??{
????????????compare[0]++;
????????????l[j+1]=l[j]change[0]++;
????????????move[0]++;
????????}
????????compare[0]++;
????????l[j+1]=x;
????}
}
//~~~~~~~~~~~~~~~簡單選擇排序~~~~~~~~~~~~~~~~~~~~~
void?Swap(int&aint&b)
{
????int?e=a;a=b;b=e;
}
void?SortableSList::SelectSort()
{
????int?s;
????for(int?i=0;i ?{
????????s=i;
????????compare[1]++;
????????for(int?j=i+1;j ????????????if(l[j] ????????Swap(l[i]l[s])move[1]=move[1]+3change[1]++;
????}
}
//~~~~~~~~~~~~~~~快速排序~~~~~~~~~~~~~~~~~~~~~~~~~
int?SortableSList::Partition(int?leftint?right)
{
????int?i=leftj=right+1;
????do{
????????do?
????????{i++;?compare[3]++;}while(l[i] ????????do?
????????{j--;?compare[3]++;}while(l[j]>l[left]);
?????????if(i ????}whil
- 上一篇:C++MFC教程
- 下一篇:arm板控制指紋模塊
評論
共有 條評論