pat 1089(两个点没有过)
2015-02-23 08:55
134 查看
#include<stdio.h> int org[100], sorted[100],it,ms[100]; bool IsInsert(int n){ if (n == 1) return true; int i; for (i = 1; i < n; i++) if (sorted[i] < sorted[i - 1]) break; if (i == n) return true; it = i; while (i < n){ if (org[i] != sorted[i]) break; i++; } if (i == n) return true; else return false; } void InsertSort(int n){ int i; int tmp = sorted[it]; for (i = it; i >= 1; i--) if (sorted[i-1]>tmp) sorted[i] = sorted[i-1]; else break; sorted[i] = tmp; } void MergeSort(int n){ int i,j,k,pt,f = 0,count = 0; for (k = 1; k < n; k *= 2){ if (f == 2) break; if (f == 1) f++; for (i = 0; i + k < n; i += k){ j = i + k; pt = i; int pi, pj; pi = i; pj = j; while (i < k + pi&&j < k + pj){ if (org[i] <= org[j]) ms[pt++] = org[i++]; else ms[pt++] = org[j++]; } while (i < k + pi){ ms[pt++] = org[i++]; } while (j < k + pj){ ms[pt++] = org[j++]; } } for (i = 0; i < n; i++) org[i] = ms[i]; bool flag = false; for (i = 0; i < n;i++) if (sorted[i] != ms[i]){ flag = true; break; } if (flag) continue; else f = 1; } } /* void MergeSort(int n){ int max = 0, min = 150; int len = 1; int i = 0; while (i < n-1){ len = 1; while (sorted[i] <= sorted[i + 1] && i + 1 < n){ i++; len++; } if (len < min) min = len; if (len > max) max = len; i++; } if (max == min) it = max; else if (n % max == min&&max%2 == 0) it = max; else it = min; int *t1 = new int[it]; int *t2 = new int[it]; int j; i = j = 0; int s1 = 0, s2 = 0,st = 0; while (i < n){ j = 0; st = i; while (j < it&&i<n){ t1[j++] = sorted[i++]; } if (i == n) break; j = 0; while (j < it&&i < n){ t2[j++] = sorted[i++]; } s1 = it; if (i == n) s2 = j; else s2 = it; int p1, p2; p1 = p2 = 0; while (p1 < s1&&p2 < s2){ if (t1[p1] <= t2[p2]) sorted[st++] = t1[p1++]; else sorted[st++] = t2[p2++]; } while (p1 < s1){ sorted[st++] = t1[p1++]; } while (p2 < s1){ sorted[st++] = t2[p2++]; } } }*/ int main(){ freopen("1.in", "r", stdin); int n; scanf("%d", &n); int i; for (i = 0; i < n; i++) scanf("%d", &org[i]); for (i = 0; i < n; i++) scanf("%d", &sorted[i]); bool flag = IsInsert(n); if (flag){ printf("Insertion Sort\n"); //InsertSort(n); for (i = 0; i < n; i++){ printf("%d", sorted[i]); if (i == n - 1) putchar('\n'); else putchar(' '); } } else{ printf("Merge Sort\n"); MergeSort(n); for (i = 0; i < n; i++){ printf("%d", ms[i]); 4000 if (i == n - 1) putchar('\n'); else putchar(' '); } } return 0; }
相关文章推荐
- [PAT甲级]1002. A+B for Polynomials (25)(求两个多项式的和)
- PAT1038(两个运行超时 未解决
- 两个黄鹂鸣翠柳,我连对象都没有
- linux下两个目录的数据是一致的,没有做链接,怎么实现的?
- 如何让self.navigationController退出到指定页面,或者让它一次性pop出两个页面popViewControllerAnimated没有
- PAT 1016(一个点也没有过Σ( ° △ °|||)︴,不知道问题出在哪里)
- PAT甲级 1034 -- 没有注释
- 今天发觉两个applicationContext.xml没有同步,就把大的一个覆盖掉小的.结果报了以下错
- PAT 2-12. 两个有序链表序列的交集
- 应用两个DLL文件在Keil环境下进行单片机开发调试仿真,强烈推荐给没有实验开发板的同学!!!!
- PAT 两个二叉树的模拟题 L2-004,L2-011
- 博客里面什么都没有,把师傅给我做的两个题目贴一下吧^_^
- PAT DS 2-11 两个有序链表序列的交集
- PAT甲级 1021 没有AC,留着重做
- PAT 1010 Radix (25)没有通过
- 新问题: 两个样式对同一个元素操作,为什么最新的样式没有起作用?(已解决)
- PAT程序设计考题——甲级1009(计算两个多项式相乘的积)
- 两个工程有交集的时候,如果不重新编译两个工程等于没有修改工程
- 因为这两天比较忙,所以没有及时把要发表的东西写来.废话少说:我前面把两个简单的滚动说了下.接下来介绍第三种集合循环滚动.
- mysql jdbc在hive中没有安装导致的两个问题