PAT考试乙级1035(C语言实现)重点题目(排序)
来源:互联网 发布:全景旅游教学软件 编辑:程序博客网 时间:2024/06/05 13:26
#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;int origin[110],changed[110],temp[110],output[110];bool equals(int A[], int B[], int len){ for(int i = 0; i<len; i++) { if(A[i] != B[i]) return false; } return true;}bool insertSort(int A[], int len){ bool flag = false; for(int i = 0; i<len; i++) { temp[i] = A[i]; } //每趟排完,前i个数是有序的 for(int i = 1; i<len; i++) { for(int j = i; j>0; j--) //进行一趟插入排序 { if(temp[j] < temp[j-1]) swap(temp[j], temp[j-1]); } if(flag == true) { for(int k = 0; k<len; k++) output[k] = temp[k]; return true; } if(equals(changed, temp, len)) flag = true; } return false;}void merge(int A[], int L1, int R1, int L2, int R2){ int i = L1, j = L2; int store[110], index = 0; while(i <= R1 && j <= R2) { if(A[i] < A[j]) store[index++] = A[i++]; else store[index++] = A[j++]; } while(i <= R1) store[index++] = A[i++]; while(j <= R2) store[index++] = A[j++]; for(int k = 0; k < index; k++) { A[L1+k] = store[k]; //千万注意,这里是A[L1+k]不是A[k] }}bool mergeSort(int A[], int len){ bool flag = false; for(int i = 0; i<len; i++) { temp[i] = A[i]; } for(int step = 2; step/2 < len; step *= 2) { for(int i = 0; i<len; i+=step) { int mid = i + step/2 -1; //该组左半边最后一个元素 if(mid + 1 <len) { merge(temp, i, mid, mid+1, min(len-1, i+step-1)); } } if(flag == true) { for(int k = 0; k<len; k++) output[k] = temp[k]; return true; } if(equals(changed, temp, len)) flag = true; } return false;}int main(){ int num=0,i; scanf("%d",&num); for(i=0;i<num;i++){ scanf("%d",&origin[i]); } for(i=0;i<num;i++){ scanf("%d",&changed[i]); } if(insertSort(origin,num)){ printf("Insertion Sort\n"); printf("%d",output[0]); for(i=1;i<num;i++) printf(" %d",output[i]); } if(mergeSort(origin,num)){ printf("Merge Sort\n"); printf("%d",output[0]); for(i=1;i<num;i++) printf(" %d",output[i]); } return 0;}
总结:
1、本题相当难 直接参考了http://blog.csdn.net/R11happy/article/details/52590817
2、使用了c++编译器,用c语言实现比较繁琐。
3、重新实现了插入和归并排序,导致代码量比较大。
阅读全文
0 0
- PAT考试乙级1035(C语言实现)重点题目(排序)
- PAT考试乙级1015(C语言实现) 重点题目
- PAT考试乙级1019(C语言实现) 重点题目
- PAT考试乙级1024(C语言实现)重点题目
- PAT考试乙级1028(C语言实现)重点题目
- PAT考试乙级1030(C语言实现)重点题目
- PAT考试乙级1031(C语言实现)重点题目
- PAT考试乙级1034(C语言实现)重点题目
- PAT考试乙级1050(C语言实现) (重点题目)(memset以及思路)
- PAT考试乙级1050(C语言实现) (重点题目)(关于保留小数的坑)
- PAT考试乙级1054(C语言实现) (重点题目)(思路)
- PAT考试乙级1033(C语言实现)重点题目 部分正确(已解决)
- PAT考试乙级1045(C语言实现)重点题目(思路)
- PAT考试乙级1048(C语言实现)重点题目(思路、用到了memset)
- PAT考试乙级1050(C语言实现) (重点题目)(按格式读取,使用容器vector)
- PAT考试乙级1055(C++语言实现) (重点题目)(思路)
- PAT考试乙级1001(C语言实现)
- PAT考试乙级1002(C语言实现)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- C语言小练习8
- 6.9
- LocalTime的使用方法
- c3p0详细配置
- PAT考试乙级1035(C语言实现)重点题目(排序)
- 第十二周LeetCode
- 三维计算机视觉(一)--点云处理综述
- 【Scikit-Learn 中文文档 】1 安装 scikit-learn | ApacheCN
- LocalDateTime的使用
- DispatcherServlet与初始化主线
- 6.10
- Tomcat搭建Web 应用服务器
- 侧拉+底部按钮