您的位置:首页 > 其它

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
相关文章推荐