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
我能够获得所需的输出,但我不确定这是否是解决问题的最佳方法?
答案 0 :(得分: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;
}
}
}
答案 1 :(得分:0)
有一种更好的方法。特别是,您的排序算法是
O(n^2)
),请参阅O(n * log n)
备选方案的众所周知的排序算法(https://en.wikipedia.org/wiki/Sorting_algorithm,请参阅MergeSort和QuickSort,了解流行的方法)。在实践中,无论如何,您的语言的标准库将包含一个很好的实现。n
个元素。如果您有许多“第一个”,那么您实际上只需要m = n - number_of_first
元素,并且可以在O(m * log m)
中完成。通常,第二点并不重要。如果是这样,你可能会处理一些不同的元素,然后使用像更好的时间强制性这样的东西也是一个好主意https://en.wikipedia.org/wiki/Counting_sort
忽略具有少量不同元素的情况,我建议你翻看一次数组并将所有不是“firstNumber”的元素复制到另一个数组。然后使用标准排序算法对另一个数组进行排序 - 最好是内置算法。
最后,您的输出为array.length - otherArray.length
次firstNumber
,后跟已排序的otherArray
答案 2 :(得分: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)