0
int[] array = {1,1,0,1,2,2,0,0};
int  firstNumber = 1;// dynamic can be 0 or 1 or 2
int numberOfOccurances = 0;

//Basic sort functionality
for(int i = 0 ; i< array.length; ++i)
{
    if(array[i] == firstNumber)
    {
        numberOfOccurances++;
    }
    for(int j = i+1; j<array.length; ++j)
    {   
        if(array[j] < array[i])
        {   
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
}
int[] requiredArray= new int[array.length]; 
for(int i = array.length-1 ; i >= 0; i--)
{
    if(array[i] != firstNumber)
    requiredArray[i] = array[i];

}
for(int i =0;i<array.length;i++)
{
    if(i<numberOfOccurances)
    requiredArray[i]= firstNumber;
}

//Print Output
for (int i = 0; i<requiredArray.length; i++)
System.out.print(requiredArray[i] + "  ");

出力: 1 1 1 1 0 0 2 2

目的の出力を得ることができましたが、これが問題を解決する最善の方法であるかどうかはわかりません。

4

3 に答える 3

0

数字のサイズによっては、数字の出現ごとに数えて、数えた回数だけ数字を出力したい場合があります。これは O(n) アルゴリズムです。

arrayToBeSorted = {collection of numbers}
firstNumber = arrayToBeSorted[0]
countArray = new int[max(arrayToBeSorted)]; //everything defaults to 0 in most languages
for i:= 0 -> N
    countArray[arrayToBeSorted[i]]++;

for i:= 0 ->countArray[firstNumber]
    print(firstNumber)

for i: = 0 ->countArray.length
    if (i == firstNumber)
        continue;
    for j:= 0 -> countArray[i]
        print(i)
于 2015-10-26T18:13:07.560 に答える
0

これは簡単な解決策です。次の場合は番号を変更します: - もう一方が firstNumber である - もう一方がマイナーであり、最初の番号ではない

    int[] array = {1,1,0,1,2,2,0,0,3,2,1,0,0,1,2,3,2,3};

    int firstNumber = 1, temp;

    for(int i=0;i<array.length-1;i++) {
        for(int j=i+1;j<array.length;j++) {

            if( (array[j] < array[i] && array[i]!=firstNumber) || array[j]==firstNumber) {
                temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
于 2015-10-15T12:43:53.090 に答える