(1)编程完成待排序数据的生成
//生成随机数
int main(){
int arr[10];
srand((unsigned)time(0));
for(int i=1;i<=10;i++){
arr[i]=(rand()%100+1);
cout<<arr[i]<<endl;
}
}
(2)实现将元素从小到大排序的插入排序算法
for(int i=2;i<=10;i++){
int j,x=arr[i];
for(j=i;j>1&&arr[j-1]>x;j--){
arr[j]=arr[j-1];
}
arr[j]=x;
}
cout<<"这是排序后:";
for(int i=1;i<=10;i++){
cout<<arr[i]<<" ";
}
任务2:对照插入排序算法的伪代码编程实现插入排序算法,输出数组检查排序编程结果的正确性。
任务3:统计输入随机情况下插入排序算法的运行时间,取7组不同数据规模下算法的运行时间(10,5000,10000,15000,20000,25000,30000)。
任务4:添加代码对于已排好序的数组再次排序,记录7组不同数据规模下算法的运行时间(10,5000,10000,15000,20000,25000,30000)。
(3)实现从大到小的插入排序算法并观察算法在最坏情况下的运行时间
任务5:继续添加代码,实现数据从大到小排列的插入排序算法。对从小到大排序的数据进行从大到小排序,记录7组不同数据规模下在最坏情况下插入排序算法的运行时间(10,5000,10000,15000,20000,25000,30000)。
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
//生成随机数
int main(){
int arr[5000];
srand((unsigned)time(0));
cout<<"这是排序前:";
for(int i=1;i<=5000;i++){
arr[i]=(rand()%40000+1);
cout<<arr[i]<<" ";
}
cout<<endl;
//实现将元素从小到大排序的插入排序算法
for(int i=2;i<=5000;i++){
int j,x=arr[i];
for(j=i;j>1&&arr[j-1]>x;j--){
arr[j]=arr[j-1];
}
arr[j]=x;
}
cout<<"这是排序后:";
for(int i=1;i<=5000;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
for(int i=2;i<=5000;i++){
int j,x=arr[i];
for(j=i;j>1&&arr[j-1]>x;j--){
arr[j]=arr[j-1];
}
arr[j]=x;
}
cout<<"这是第二次排序后:";
for(int i=1;i<=5000;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
//从大到小排序
for(int i=2;i<=5000;i++){
int j,x=arr[i];
for(j=i;j>1&&arr[j-1]<x;j--){
arr[j]=arr[j-1];
}
arr[j]=x;
}
cout<<"这是第三次排序后:" ;
for(int i=1;i<=5000;i++){
cout<<arr[i]<<" ";
}
return 0;
}
任务6:为之前获取的三批次时间数据制作折线图,观察插入排序算法在最好、最坏和平均情况下的算法运行时间,进一步理解受输入影响的算法复杂度的概念。
编程提示
在c语言中:
若使用rand函数生成随机数需要#include<stdlib.h>
若使用clock函数需要#include<time.h>
随机生成种子srand((unsigned)time(NULL));
获取当前系统时间(毫秒级) clock();