swap交换
#include <stdio.h>
void swap (int &a, int &b)
{
int t;
t = a;
a = b;
b = t;
}
int main()
{
int x=5, y=3;
swap (x, y);
printf ("%d,%d",x,y);
return 0;
}
#include <stdio.h>
void swap (int *ap, int *bp)
{
int t;
t = *ap;
*ap = *bp;
*bp = t;
}
int main()
{
int a=5, b=3;
swap (&a, &b);
printf ("%d,%d",a,b);
return 0;
}
万年历
#include <stdio.h>
int main()
{
int monthdays[] = {
31, 28, 31, 30,
31, 30, 31, 31,
30, 31, 30, 31
};
int year, month, days, weekday;
int buf[42];
scanf ( "%d-%d", &year,&month );
if((year%4==0) && (year%100 || year%400==0)) monthdays[1]++;
days = (year-1)*365 + year/4 - year/100 + year/400;
for(int i=0; i<month-1; i++) days += monthdays[i];
weekday = days%7;
for(int i=0; i<42; i++) buf[i] = 0;
for(int i=1,j=weekday; i<=monthdays[month-1]; i++,j++) buf[j] = i;
printf("% 13d年%d月\n", year,month);
printf("日 一 二 三 四 五 六 \n");
for(int j=0; j<6; j++) {
for(int i=0; i<7; i++)
printf ( "%02d ", buf[j*7+i] );
printf("\n");
}
return 0;
}
字符串比较
#include <stdio.h>
#include <stdlib.h>
int strcmp (char *S1, char *S2)
{
for (int i=0; (S1[i]&&S2[i])||(S1[i]!=S2[i]); i++)
{
if(S1[i]>S2[i])
{
return 1;
}
if(S1[i]<S2[i])
{
return -1;
}
}
return 0;
}
/***********************************************************/
int main()
{
char *S1="aaaa";
char *S2="aaaaaaa";
printf ("%d", strcmp ( S1, S2 ));
}
查找字符串中字符
#include <stdio.h>
#include <stdlib.h>
int strchr (char *S, char c)
{
for (int i=0; S[i]; i++)
{
if(S[i]==c)
{
return i;
}
}
return -1;
}
/***********************************************************/
int main()
{
char *S="xyz";
char c='z';
printf ("%d", strchr ( S, c ));
}
字符串比较加限制长度
#include <stdio.h>
#include <stdlib.h>
int strcmp (char *S1, char *S2, int n)
{
for (int i=0; ((S1[i]&&S2[i])||(S1[i]!=S2[i]))&&(i<n); i++)
{
if(S1[i]>S2[i])
{
return 1;
}
if(S1[i]<S2[i])
{
return -1;
}
}
return 0;
}
/***********************************************************/
int main()
{
char *S1 ="aaaa";
char *S2 ="aaaaaaa";
int n = 4;
printf ("%d", strcmp ( S1, S2, n ));
}
#include <stdio.h>
#include <stdlib.h>
char *strncpy (char *S1, char *S2, int n)
{
int i;
for (i=0; S2[i] && i<n; i++)
{
S1[i] = S2[i];
}
S1[i] = '\0';
return S1;
}
/***********************************************************/
int main()
{
char *S2 = "abcde";
char S1[6];
printf ("%s", strncpy ( S1, S2, 4 ));
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int a[]={1,4,5,8,9};
int alen = sizeof(a)/sizeof(a[0]);
int b[]={2,3,6,7,10};
int blen = sizeof(b)/sizeof(b[0]);
int c[256];
int clen = 0;
int i=0, j=0;
while(i<alen && j<blen) {
c[clen++] = a[i]>b[j] ? b[j++] : a[i++];
}
while(i<alen) c[clen++] = a[i++];
while(j<blen) c[clen++] = b[j++];
for (int l=0; l<clen; l++) printf("%d ", c[l]);
printf("\n");
}
#include <stdio.h>
#include <string.h>
int bsearch (char *a[], char *v, int begin, int end)
{
for (int i=(begin+end+1)/2; i<end; i=i)
{
switch (strcmp (a[i], v))
{
case 1: end=i;
case -1: begin=i;
case 0: return i;
}
}
return -1;
}
int main()
{
char *s[] = {"abort", "broad", "count", "discount", "enough", "fire", "good", "hire", "inspect", "jump", "kick", "help"};
printf("%d\n", bsearch(s, "fire", 0, 11));
}
#include <stdio.h>
#include <stdlib.h>
typedef int Data;
struct Node
{
Data data;
struct Node *left;
struct Node *right;
};
typedef struct Node *PNode;
PNode createNode(Data data)
{
PNode p = (PNode)malloc(sizeof(struct Node));
if(!p)
{
printf("Out of memory!\n");
exit(-1);
}
p->data = data;
p->left = NULL;
p->right = NULL;
return p;
}
void appendNode(PNode &btree, Data data)
{
if(!btree)
{
btree = createNode(data);
return;
}
appendNode(data < btree->data ? btree->left : btree->right, data);
}
void preOrder(PNode btree, void (*func)(PNode))
{
if(!btree)return;
func(btree);
preOrder(btree->left, func);
preOrder(btree->right, func);
}
void inOrder(PNode btree, void (*func)(PNode))
{
if(!btree) return;
inOrder(btree->left,func);
func(btree);
inOrder(btree->right,func);
}
void postOrder(PNode btree, void (*func)(PNode))
{
if(!btree) return;
postOrder(btree->left, func);
postOrder(btree->right, func);
func(btree);
}
void freeNode(PNode btree)
{
postOrder(btree, (void (*)(PNode))free);
}
/**********************************************************************/
void printNode(PNode p)
{
if(!p) return;
printf("%d ", p->data);
}
int main()
{
Data a[]={8,7,15,30,2,4,6};
int length = sizeof(a)/sizeof(a[0]);
PNode btree = NULL;
for(int i=0; i<length; i++)
{
appendNode(btree, a[i]);
}
inOrder(btree, printNode);
printf("\n");
freeNode(btree);
}
#include <stdio.h>
void w(int a[3], int v)
{
a[2] = v%10; v/=10;
a[1] = v%10; v/=10;
a[0] = v;
}
int p(int a[9])
{
int c[10]={1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for (int i=0; i<9; i++)
{
if(c[a[i]]) return 0;
c[a[i]] = 1;
}
return 1;
}
int main()
{
int a[9];
for (int i=123; i<=329; i++)
{
w(a, i);
w(a+3, 2*i);
w(a+6, 3*i);
if(p(a)) printf ("%d %d %d\n", i, 2*i, 3*i);
}
}
#include <stdio.h>
#include <stdlib.h>
unsigned long fibonacci(unsigned int n)
{
switch(n) {
case 0:
case 1:
return 1;
default:
return fibonacci(n-1)+fibonacci(n-2);
}
}
int main()
{
printf("%ld", fibonacci(42));
return 0;
}
#include <stdio.h>
#include <stdlib.h>
unsigned long fibonacci(unsigned int n)
{
static unsigned long F[100] = {1, 1};
static int N = 2;
while(n >= N) {
F[N] = F[N-1]+F[N-2];
N++;
}
return F[n];
}
int main()
{
printf("%ld", fibonacci(82));
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void p(char x, int y)
{
for (int i=0; i<y; i++)
{
printf("%c", x);
}
}
int main()
{
int n=21;
for (int i=1; i<=n; i+=2)
{
p(' ', (n-i)/2);
p('*', i);
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int f(int x)
{
int y=0;
while(x)
{
int i=x%10;
x/=10;
y=y*10+i;
}
return y;
}
int main()
{
int i=-1385;
printf("%d",f(i));
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void out(int count, int limit)
{
printf(count >= limit ? " *" : " ");
}
int main()
{
int max = 0, count[26];
for(int i=0; i<26; i++) count[i] = 0;
char *s = "THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.THIS IS AN EXAMPLE TO TEST FOR YOURHISTOGRAM PROGRAM.HELLO!";
for(int i=0; s[i]; i++)
{
if('A'<=s[i] && s[i]<='Z')
{
if(++count[s[i]-'A']>max) max = count[s[i]-'A'];
}
}
for(int limit=max; limit>0; limit--)
{
for(int i=0; i<26; i++) out(count[i], limit);
printf("\n");
}
for(int i='A'; i<='Z'; i++) printf(" %c", i);
printf("\n");
}
#include <stdio.h>
#include <stdlib.h>
int max (int a, int b)
{
return (a>b) ? a : b;
}
int min (int a, int b)
{
return (a<b) ? a : b;
}
int add (int *a, int n)
{
int sum = 0;
for (int i=0; i<n; i++) sum += a[i];
return sum;
}
int fajo(int *a, int n, int m)
{
if(m==1) return add(a, n);
int best = max(add(a, 1), fajo(a+1, n-1, m-1));
for(int i=1; i<=n-m; i++) {
int t = max(add(a, 1+i), fajo(a+1+i, n-1-i, m-1));
best = min(best, t);
}
return best;
}
int main() {
int n, m, a[100];
scanf("%d %d\n", &n, &m);
for(int i=0; i<n; i++) scanf("%d\n", &a[i]);
printf("%d\n", fajo(a, n, m));
}
#include <stdio.h>
struct student {
int k;
int s;
};
int Partion(struct student *a, int left, int right) {
struct student pivot = a[left];
while(left < right) {
while(left < right && a[right].s <= pivot.s) --right;
if(left < right) a[left++] = a[right];
while(left < right && a[left].s >= pivot.s) ++left;
if(left < right) a[right--] = a[left];
}
a[left] = pivot;
return left;
}
void QuickSort(struct student *a, int left, int right) {
if(left < right) {
int pivotpos = Partion(a, left, right);
QuickSort(a, left, pivotpos-1);
QuickSort(a, pivotpos+1, right);
}
}
int main() {
int n, m;
struct student a[100];
scanf("%d %d\n", &n, &m);
for (int i=0; i<n; i++) scanf("%d %d\n", &a[i].k, &a[i].s);
QuickSort( a, 0, n-1 );
int c=(int)(m*1.5+0.5);
printf("%d %d\n", a[c-1].s, c);
for (int i=0; i<c; i++) printf("%d %d\n", a[i].k, a[i].s);
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int array[100][100], row, col;
scanf("%d %d\n", &row, &col);
for (int i=0; i<row; i++) {
for (int j=0; j<col; j++) scanf("%d ", &array[i][j]);
scanf("\n");
}
struct {
int x;
int y;
} directs[4] = {
{1,0}, {0,1}, {-1,0}, {0,-1}
};
int direct = 0;
int left=0, top=0, right=col-1, bottom=row-1;
int x=0, y=0;
printf("(%d, %d) = %d\n", x, y, array[y][x]);
for (int i=0; i<row*col-1; i++)
{
int u= x+directs[direct].x;
int v= y+directs[direct].y;
if(u<left || u>right || v<top || v>bottom) {
switch(direct) {
case 0: top++; break;
case 1: right--; break;
case 2: bottom--; break;
case 3: left++; break;
}
direct = (direct+1)%4;
x += directs[direct].x;
y += directs[direct].y;
}
else {
x = u;
y = v;
}
printf("(%d, %d) = %d\n", x, y, array[y][x]);
}
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int array[100][100], row, col;
scanf("%d %d\n", &row, &col);
for (int i=0; i<row; i++) {
for (int j=0; j<col; j++) scanf("%d ", &array[i][j]);
scanf("\n");
}
int x=0, y=0;
printf("(%d, %d) = %d\n", x, y, array[y][x]);
for (int i=0; i<row*col-1; i++) {
int u= x-1, v= y+1;
if(u<0 || v>=row) {
u= x+y+1;
v= 0;
if(u>=col) {
v= u-(col-1);
u= col-1;
}
}
x= u, y= v;
printf("(%d, %d) = %d\n", x, y, array[y][x]);
}
}
数组排序颠倒
int a[10], b[10];
for (int i=0; i<10; i++) b[i] = a[9-i];
#include <stdio.h>
#include <stdlib.h>
void m(int hour, int minute, int second, int day, int month, int year)
{
int monthdays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if((year%4==0) && (year%100 || year%400==0)) monthdays[1]++;
day += year*365 + year/4 - year/100 + year/400 + (year%100 ? 1 : 0);
for(int i=0; i<month; i++) day += monthdays[i];
int seconds = (int)(1.0*(hour*60*60+minute*60+second)/(24*60*60)*(10*100*100));
int mhour = seconds/(100*100),
mmin = seconds%(100*100)/100,
msec = seconds%100,
mday = day%100 + 1,
mmonth = day%1000/100 + 1,
myear = day/1000;
printf("%d:%d:%d %d.%d.%d\n", mhour, mmin, msec, mday, mmonth, myear);
}
int main()
{
int n;
scanf("%d\n", &n);
for(int i=0; i<n; i++) {
int hour, minute, second, day, month, year;
scanf("%d:%d:%d %d.%d.%d\n", &hour, &minute, &second, &day, &month, &year);
m(hour, minute, second, day-1, month-1, year-2000);
}
return 0;
}
大整数乘法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char a[100];
scanf("%s\n", a);
int aSize = strlen(a);
for(int j=0; j<aSize; j++) a[j] -= '0';
char b[100];
scanf("%s\n", b);
int bSize = strlen(b);
for(int i=0; i<bSize; i++) b[i] -= '0';
int cSize = aSize+bSize;
char c[cSize];
for(int k=0; k<cSize; k++) c[k] = 0;
for(int i=bSize-1; i>=0; i--) {
for(int j=aSize-1; j>=0; j--) {
int k = i+1+j;
c[k] += a[j]*b[i];
if(c[k] >= 10) {
c[k-1] += c[k]/10;
c[k] %= 10;
}
}
}
int k=0;
while(c[k]==0) k++;
while(k<cSize) printf("%d", c[k++]);
printf("\n");
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d\n", &n);
struct {
int v;
int c;
} a[n];
for(int i=0; i<n; i++) {
scanf("%d ", &a[i].v);
a[i].c = 1;
}
for(int i=0; i<n-1; i++) {
for(int j=i+1; j<n && a[j].v==a[i].v; j++) a[j].c++;
}
int k = a[0].c;
for(int i=1; i<n; i++) {
if(a[i].c>k) k = a[i].c;
printf("%d ", a[i].c);
}
printf("%d\n", k);
}
#include <stdio.h>
#include <stdlib.h>
struct student {
int m;
float s;
};
int Partion(struct student *a, int left, int right) {
struct student pivot = a[left];
while(left < right) {
while(left < right && a[right].s >= pivot.s) --right;
if(left < right) a[left++] = a[right];
while(left < right && a[left].s <= pivot.s) ++left;
if(left < right) a[right--] = a[left];
}
a[left] = pivot;
return left;
}
void QuickSort(struct student *a, int left, int right) {
if(left < right) {
int pivotpos = Partion(a, left, right);
QuickSort(a, left, pivotpos-1);
QuickSort(a, pivotpos+1, right);
}
}
int main() {
int n, k;
scanf("%d %d\n", &n, &k);
struct student a[n];
for (int i=0; i<n; i++) scanf("%d %f\n", &a[i].m, &a[i].s);
QuickSort( a, 0, n-1 );
printf("%d %.1f\n", a[k-1].m, a[k-1].s);
}
#include <stdio.h>
#include <stdlib.h>
int PartionMin(int *a, int left, int right) {
int pivot = a[left];
while(left < right) {
while(left < right && a[right] >= pivot) --right;
if(left < right) a[left++] = a[right];
while(left < right && a[left] <= pivot) ++left;
if(left < right) a[right--] = a[left];
}
a[left] = pivot;
return left;
}
/* 由小至大 */
int PartionMax(int *a, int left, int right) {
int pivot = a[left];
while(left < right) {
while(left < right && a[right] <= pivot) --right;
if(left < right) a[left++] = a[right];
while(left < right && a[left] >= pivot) ++left;
if(left < right) a[right--] = a[left];
}
a[left] = pivot;
return left;
}
void QuickSortMin(int *a, int left, int right) {
if(left < right) {
int pivotpos = PartionMin(a, left, right);
QuickSortMin(a, left, pivotpos-1);
QuickSortMin(a, pivotpos+1, right);
}
}
void QuickSortMax(int *a, int left, int right) {
if(left < right) {
int pivotpos = PartionMax(a, left, right);
QuickSortMax(a, left, pivotpos-1);
QuickSortMax(a, pivotpos+1, right);
}
}
int main() {
int n, i=0, j=0;
int a[10], b[10];
for(int m=0; m<10; m++)
{
scanf("%d ", &n);
if(n%2) a[i++]=n;
else b[j++]=n;
}
QuickSortMax( a, 0, i-1 );
for(int m=0; m<i; m++) printf("%d ", a[m]);
QuickSortMin( b, 0, j-1 );
for(int m=0; m<j; m++) printf("%d ", b[m]);
}
#include <stdio.h>
#include <stdlib.h>
int Partion(int *a, int left, int right, int (*cmp)(int, int)) {
int pivot = a[left];
while(left < right) {
while(left < right && cmp(a[right], pivot)>=0) --right;
if(left < right) a[left++] = a[right];
while(left < right && cmp(a[left], pivot)<=0) ++left;
if(left < right) a[right--] = a[left];
}
a[left] = pivot;
return left;
}
void QuickSort(int *a, int left, int right, int (*cmp)(int, int)) {
if(left < right) {
int pivotpos = Partion(a, left, right, cmp);
QuickSort(a, left, pivotpos-1, cmp);
QuickSort(a, pivotpos+1, right, cmp);
}
}
int cmp(int u, int v) {
switch(u%2*2+v%2) {
case 0: return u-v;
case 1: return 1;
case 2: return -1;
case 3: return v-u;
}
}
int main() {
int a[10];
for(int m=0; m<10; m++) scanf("%d ", &a[m]);
scanf("\n");
QuickSort(a, 0, 9, cmp);
for(int m=0; m<10; m++) printf("%d ", a[m]);
printf("\n");
}
排列+二分法整数查找
#include <stdio.h>
#include <stdlib.h>
int Partion(int *a, int left, int right) {
int pivot = a[left];
while(left < right) {
while(left < right && a[right] >= pivot) --right;
if(left < right) a[left++] = a[right];
while(left < right && a[left] <= pivot) ++left;
if(left < right) a[right--] = a[left];
}
a[left] = pivot;
return left;
}
void QuickSort(int *a, int left, int right) {
if(left < right) {
int pivotpos = Partion(a, left, right);
QuickSort(a, left, pivotpos-1);
QuickSort(a, pivotpos+1, right);
}
}
int bsearch(int *a, int begin, int end, int b)
{
while(begin < end) {
int i = (begin+end)/2;
int f = a[i]-b;
if(!f) return a[i];
if(f < 0) begin = i+1;
else end = i-1;
}
return a[begin];
}
int main() {
int n;
scanf("%d\n", &n);
int a[n];
for(int i=0; i<n; i++) scanf("%d ", &a[i]);
scanf("\n");
QuickSort( a, 0, n-1);
int m;
scanf("%d\n", &m);
for(int i=0; i<m; i++) {
int b;
scanf("%d\n", &b);
printf("%d\n", bsearch(a, 0, n-1, b));
}
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d\n", &n);
/*
int m;
float sum=0;
for(int i=0; i<n; i++)
{
scanf("%d\n", &m);
while(m-70>=0)
{
sum++;
m-=70;
}
sum++;
}
sum*=0.1;
printf("%.1f\n", sum);
*/
int sum=0;
for(int i=0; i<n; i++)
{
int m;
scanf("%d\n", &m);
sum += m/70+1;
}
printf("%.1f\n", 0.1*sum);
}
#include <stdio.h>
#include <stdlib.h>
struct student {
char m[32];
int n;
};
int Partion(struct student *a, int left, int right, int (*cmp)(struct student, struct student)) {
struct student pivot = a[left];
while(left < right) {
while(left < right && cmp(a[right], pivot)>=0) --right;
if(left < right) a[left++] = a[right];
while(left < right && cmp(a[left], pivot)<=0) ++left;
if(left < right) a[right--] = a[left];
}
a[left] = pivot;
return left;
}
void QuickSort(struct student *a, int left, int right, int (*cmp)(struct student, struct student)) {
if(left < right) {
int pivotpos = Partion(a, left, right, cmp);
QuickSort(a, left, pivotpos-1, cmp);
QuickSort(a, pivotpos+1, right, cmp);
}
}
int cmp(struct student u, struct student v) {
return v.n-u.n;
}
int main() {
int n;
scanf("%d\n", &n);
struct student a[n];
for (int i=0; i<n; i++) scanf("%s %d\n", a[i].m, &a[i].n);
QuickSort(a, 0, n-1, cmp);
for (int i=0; i<n; i++) printf("%s %d\n", a[i].m, a[i].n);
}
直接代入排序
#include <stdio.h>
#include <stdlib.h>
void f(int *a, int n, int m)
{
if(n<2) return;
for(int i=1; i<n; i++)
{
if(a[0]+a[i]==m) {
printf("%d %d\n", a[0], a[i]);
exit(0);
}
}
f(a+1, n-1, m);
}
int cmp(int *u, int *v) {
return *u - *v;
}
int main()
{
int n;
scanf("%d\n", &n);
int a[n];
for(int i=0; i<n; i++) scanf("%d ", a+i);
scanf("\n");
qsort(a, n, sizeof(int), (int (*)(const void *, const void *))cmp);
int m;
scanf("%d\n", &m);
f(a, n, m);
}
归并排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
char s[64];
int n;
};
void Merge(struct student *a, int s, int m, int e, struct student *tmp)
{
int pb=0;
int p1=s, p2=m+1;
while(p1 <= m && p2<= e)
{
if( a[p1].n > a[p2].n || (a[p1].n==a[p2].n && strcmp(a[p1].s, a[p2].s)<0) ) tmp[pb++] = a[p1++];
else tmp[pb++] = a[p2++];
}
while( p1 <= m ) tmp[pb++] = a[p1++];
while( p2 <= e ) tmp[pb++] = a[p2++];
for( int i=0; i<e-s+1; i++ ) a[s+i] = tmp[i];
}
void MergeSort(struct student *a, int s, int e, struct student *tmp)
{
if( s < e )
{
int m = (s+e)/2;
MergeSort(a,s,m,tmp);
MergeSort(a,m+1,e,tmp);
Merge(a,s,m,e,tmp);
}
}
int main()
{
int n;
scanf("%d\n", &n);
struct student a[n];
for(int i=0; i<n; i++) scanf("%s %d\n", a[i].s, &a[i].n);
struct student tmp[n];
MergeSort( a, 0, n-1, tmp);
for(int i=0; i<n; i++) printf("%s %d\n", a[i].s, a[i].n);
return 0;
}
快速排序
#include <stdio.h>
#include <string.h>
struct student {
char m[64];
int n;
};
int compare(struct student a, struct student b) {
int c = b.n-a.n;
if(c) return c;
return strcmp(a.m, b.m);
}
int Partion(struct student *a, int left, int right) {
struct student pivot = a[left];
while(left < right) {
while(left < right && compare(a[right], pivot) > 0) --right;
if(left < right) a[left++] = a[right];
while(left < right && compare(a[left], pivot) < 0) ++left;
if(left < right) a[right--] = a[left];
}
a[left] = pivot;
return left;
}
void QuickSort(struct student *a, int left, int right) {
if(left < right) {
int pivotpos = Partion(a, left, right);
QuickSort(a, left, pivotpos-1);
QuickSort(a, pivotpos+1, right);
}
}
int main() {
int n;
scanf("%d\n", &n);
struct student a[n];
for (int i=0; i<n; i++) scanf("%s %d\n", a[i].m, &a[i].n);
QuickSort(a, 0, n-1);
for (int i=0; i<n; i++) printf("%s %d\n", a[i].m, a[i].n);
return 0;
}
k搜索
#include <stdio.h>
#include <stdlib.h>
void Merge(int *a, int s, int m, int e, int *tmp)
{
int pb=0;
int p1=s, p2=m+1;
while(p1 <= m && p2 <= e)
{
if(a[p1] > a[p2]) tmp[pb++] = a[p1++];
else tmp[pb++] = a[p2++];
}
while( p1 <= m ) tmp[pb++] = a[p1++];
while( p2 <= e ) tmp[pb++] = a[p2++];
for(int i=0; i<e-s+1; i++) a[s+i] = tmp[i];
}
void MergeSort(int *a, int s, int e, int *tmp)
{
if( s < e )
{
int m = (s+e)/2;
MergeSort(a,s,m,tmp);
MergeSort(a,m+1,e,tmp);
Merge(a,s,m,e,tmp);
}
}
int main()
{
int n;
scanf("%d\n", &n);
int a[n];
for(int i=0; i<n; i++) scanf("%d ", &a[i]);
scanf("\n");
int k;
scanf("%d\n", &k);
int tmp[n];
MergeSort(a, 0, n-1, tmp);
for(int i=0; i<k; i++) printf("%d\n", a[i]);
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。