您的位置:首页 > 编程语言

百度2017春招笔试真题编程题集合-4

2017-05-09 20:24 429 查看
题目:度度熊有一个N个数的数组,他想将数组从大到小排好序,但是萌萌的度度熊只会下面这个操作:任取数组中的一个数然后将它放置在数组的最后一个位置。问最少操作多少次可以使得数组从小到大有序?

以下是通过测试的源代码(此思想参考了网上另一JAVA实现@雨落晨曦——百度编程题_有趣的排序):

#include<stdio.h>
#include<stdlib.h>

int getpo(int *K, int N, int x)//通过给定值x,找出x在数组K中的位置
{
int po;
int i = 0;
for (i = 0; i < N; i++)
{
if (K[i] == x)
{
po = i;
break;
}
}
return po;
}

int sert(int *K, int N, int num)//将K[num]插到最后
{
int i = 0;
int temp = K[num];
for (i = num; i < N; i++)
{
K[i] = K[i + 1];
}
K[N-1] = temp;
return 0;
}

int main()
{
int N = 0;
int i = 0, j = 0;
int count = 0;
int save = 0;

scanf("%d", &N);
int *M = (int *)malloc(sizeof(int)*N);
int *K = (int *)malloc(sizeof(int)*N);
for (i = 0; i<N; i++)
{
scanf("%d", &M[i]);
K[i] = M[i];
}
for (i = 0; i<N; i++)
{
for (j = i + 1; j<N; j++)
{
int temp = 0;
if (M[i]>M[j])
{
temp = M[i];
M[i] = M[j];
M[j] = temp;
}
}
}
save = M[0];
for (i = 1; i < N; i++)
{
if (getpo(K, N, save) > getpo(K, N, M[i]))
{
sert(K, N, getpo(K, N, M[i]));
count++;

}
save = M[i];
}

free(M);
free(K);
//  printf("\n");
printf("%d", count);

//  system("pause");
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百度 编程 源代码