给定n个整数的数组A,找到一个可以在O(n + y - x)时间内对数组A进行排序的算法,其中x是A中的最小整数,y是A中的最大整数。 到目前为止,我只能想到把A [0]中的最小元素和A [n]中的最大元素放在一起,有人可以帮忙吗?(作业问题)
#include <stdio.h>
int sort(int array, int x, int y){
int j = 0;
int temp = 0;
for (j<=4){
if (array[j] == x){
temp = array[0];
array[0] = array[j];
array[j]=temp;
}
else if (array[j] == y){
temp = array[4];
array[0] = array[j];
array[j]=temp;
}
//////////////////////////////////////////////
////////////////////////////////////////////
////////////////////////////////////////////
}
return 0;
}
int main(){
int array[5]={3,2,5,4,1};
sort(array,1,5);
int i = 0;
for (i<=4){
printf("%d\n",array[i]);
}
return 0;
}
答案 0 :(得分:1)
这是间接要求您使用计数排序。这个概念很简单:
示例:
初始数组>>> print '\n'.join(list(ndiff(['foo'], ['foo*****'], )))
- foo
+ foo*****
? +++++
新阵列[3, 2, 3, 4, 1]
将1添加到相应的值[0, 0, 0, 0]
根据需要多次返回索引[1, 1, 2, 1]
我们案例中的对应索引意味着[1, 2, 3, 3, 4]
维基百科还有一个更深层次的解释:https://en.wikipedia.org/wiki/Counting_sort