- 问题 A: 大顶堆还是小顶堆?
- 问题 E: 算法10-6~10-8:快速排序
- 问题 F: 有序归并
- 问题 G: 算法10-1:直接插入排序
- 问题 J: 基础实验7-2.2:插入排序还是堆排序
- 问题 K: 案例7-1.2 插入排序还是归并排序
xw大佬的作业代码 点这里 !!!!!!!!!!!!!!!!!!!!
注:BCDHILM略
问题 A: 大顶堆还是小顶堆?#includeusing namespace std; typedef long long ll; const int N=100100; int w[N]; int n; int check_small( int pos){ int res=0; if(pos>=n) return 1; if(check_small(pos*2+1)==0||check_small(pos*2+2)==0) return 0; if(pos*2+1>=n||w[pos*2+1]>=w[pos]) res++; if(pos*2+2>=n||w[pos*2+2]>=w[pos]) res++; if(res==2) return 1; else return 0; } int check_big( int pos){ int res=0; if(pos>=n) return 1; if(check_big(pos*2+1)==0||check_big(pos*2+2)==0) return 0; if(pos*2+1>=n||w[pos*2+1]<=w[pos]) res++; if(pos*2+2>=n||w[pos*2+2]<=w[pos]) res++; if(res==2) return 1; else return 0; } int main(){ cin>>n; for( int i=0;i >w[i]; } if(check_small(0)==1){ cout<<"Small Heap"< 问题 E: 算法10-6~10-8:快速排序 #includeusing namespace std; int w[100100]; int main(){ int n; scanf("%d",&n); for( int i=0;i 问题 F: 有序归并 #includeusing namespace std; int main(){ vector v; int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); for( int i=0;i >x; v.push_back(x); } scanf("%d",&n); for( int i=0;i >x; v.push_back(x); } sort(v.begin(),v.end()); for( int i=0;i 问题 G: 算法10-1:直接插入排序 #includeusing namespace std; int w[100100]; int main(){ int n; scanf("%d",&n); for( int i=0;i 问题 J: 基础实验7-2.2:插入排序还是堆排序 把merge_sort函数删掉即可
#include问题 K: 案例7-1.2 插入排序还是归并排序using namespace std; const int N = 200; typedef long long ll; vector a,b; int n; void insertion_sort(){ vector c=a; for( int i=1;i<=n;i++){ sort(c.begin(),c.begin()+i); if(c==b){ cout<<"Insertion Sort"< c=a; int flag=0; for( int i=2;i<=n;i*=2){ for( int j=0;j<=n;j+=i){ sort(c.begin()+j,c.begin()+min(j+i,n)); } if(flag){ cout<<"Merge Sort"< c=a; for( int i=n;i>0;i--){ make_heap(c.begin(),c.begin()+i); if(c==b){ cout<<"Heap Sort"< >n; for( int i=0;i >x; a.push_back(x); } for( int i=0;i >x; b.push_back(x); } insertion_sort(); merge_sort(); heap_sort(); } 注:K和J的代码是一样的
把heap_sort函数删除即可



