(1)编程完成待排序数据的生成
任务1:编程实现随机数生成,将随机数保存到数组中。
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main(){
int a[11];
int i;
srand((unsigned)time(NULL));
for(i=1;i<=10;i++)
a[i]=rand();
for(i=1;i<=10;i++)
cout << a[i] << " "<<endl;
return 0;
}
(2)参照伪代码实现将元素从小到大排序的插入排序算法
任务2:对照插入排序算法的伪代码编程实现插入排序算法,输出数组检查排序编程结果的正确性。
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main()
{
int a[11];
int i;
srand((unsigned)time(NULL));
for (int i = 1; i <= 10; i ++)
a[i] = rand();
for(int j = 1; j < 11; j ++){
int key = a[j];
int i = j - 1;
while( i >= 0 and a[i] > key){
a[i+1] = a[i];
i --;
}
a[i+1] = key;
}
for (int i = 1; i <= 10; i ++)
cout << a[i] <<" "<<endl;
return 0;
}
任务3:统计输入随机情况下插入排序算法的运行时间,取7组不同数据规模下算法的运行时间(10,5000,10000,15000,20000,25000,30000)。
数据规模 | 10 | 5000 | 10000 | 15000 | 20000 | 25000 | 30000 |
时间 | 0.145 | 0.1404 | 0.1446 | 0.1462 | 0.1529 | 0.1586 | 0.161 |
任务4:添加代码对于已排好序的数组再次排序,记录7组不同数据规模下算法的运行时间(10,5000,10000,15000,20000,25000,30000)。
数据规模 | 10 | 5000 | 10000 | 15000 | 20000 | 25000 | 30000 |
时间 | 0 | 0 | 0 | 0 | 0 | 0 | 0.1 |
(3)实现从大到小的插入排序算法并观察算法在最坏情况下的运行时间
任务5:继续添加代码,实现数据从大到小排列的插入排序算法。对从小到大排序的数据进行从大到小排序,记录7组不同数据规模下在最坏情况下插入排序算法的运行时间(10,5000,10000,15000,20000,25000,30000)。
数据规模 | 10 | 5000 | 10000 | 15000 | 20000 | 25000 | 30000 |
时间 | 0.257 | 0.289 | 0.305 | 0.329 | 0.3524 | 0.3859 | 0.4102 |
任务6:为之前获取的三批次时间数据制作折线图,观察插入排序算法在最好、最坏和平均情况下的算法运行时间,进一步理解受输入影响的算法复杂度的概念。
以上仅为完成作业的个人想法,不代表正确答案,如有错误欢迎指正