给定数组中的min和max元素,如何对其进行排序?

时间:2018-03-21 18:50:29

标签: arrays algorithm

给定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;
}

1 个答案:

答案 0 :(得分:1)

这是间接要求您使用计数排序。这个概念很简单:

  1. 创建一个大小为y - x且所有0个元素
  2. 的数组
  3. 通过初始数组将1添加到新数组中与值[O(n)]
  4. 对应的索引
  5. 输出索引的新数组的次数与存储的值一样多[O(y - x)]
  6. 示例:

    • 初始数组>>> 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