Привет, мне нужна помощь, чтобы улучшить мой код.Я пытаюсь использовать Radixsort для сортировки массива из 10 чисел (например) в порядке возрастания.
Когда я запускаю программу с массивом размером 10 и помещаю 10 случайных чисел типа как 70
309
450
279
799
192
586
609
54
657
, я получаю это:
450
309
192
279
54
192
586
657
54
609
Не вижу, где моя ошибка в коде.
class IntQueue
{
static class Hlekkur
{
int tala;
Hlekkur naest;
}
Hlekkur fyrsti;
Hlekkur sidasti;
int n;
public IntQueue()
{
fyrsti = sidasti = null;
}
// First number in queue.
public int first()
{
return fyrsti.tala;
}
public int get()
{
int res = fyrsti.tala;
n--;
if( fyrsti == sidasti )
fyrsti = sidasti = null;
else
fyrsti = fyrsti.naest;
return res;
}
public void put( int i )
{
Hlekkur nyr = new Hlekkur();
n++;
nyr.tala = i;
if( sidasti==null )
f yrsti = sidasti = nyr;
else
{
sidasti.naest = nyr;
sidasti = nyr;
}
}
public int count()
{
return n;
}
public static void radixSort(int [] q, int n, int d){
IntQueue [] queue = new IntQueue[n];
for (int k = 0; k < n; k++){
queue[k] = new IntQueue();
}
for (int i = d-1; i >=0; i--){
for (int j = 0; j < n; j++){
while(queue[j].count() != 0)
{
queue[j].get();
}
}
for (int index = 0; index < n; index++){
// trying to look at one of three digit to sort after.
int v=1;
int digit = (q[index]/v)%10;
v*=10;
queue[digit].put(q[index]);
}
for (int p = 0; p < n; p++){
while(queue[p].count() != 0) {
q[p] = (queue[p].get());
}
}
}
}
}
Я также думаю, можно ли разрешить функции принимать одну очередь в качестве аргумента и при возврате эта очередь возрастает?Если так, то как?
Пожалуйста, помогите.Извините, если мой английский плох, но не настолько хорош.
Пожалуйста, дайте знать, если вам нужно больше деталей.
import java.util.Random;
public class RadTest extends IntQueue {
public static void main(String[] args)
{
int [] q = new int[10];
Random r = new Random();
int t = 0;
int size = 10;
while(t != size)
{
q[t] = (r.nextInt(1000));
t++;
}
for(int i = 0; i!= size; i++)
{
System.out.println(q[i]);
}
System.out.println("Radad: \n");
radixSort(q,size,3);
for(int i = 0; i!= size; i++)
{
System.out.println(q[i]);
}
}
}
Надеюсь, это то, что вы говорили ...
Спасибо за ваш ответ, я посмотрю на него.Не ищу кого-то, чтобы решить проблему для меня.Нужны помощь и идеи, как я могу ее решить.
в моей задаче написано:
Реализовать функцию радикальной сортировки для целых чисел, которая сортирует с очередями.Функция должна принимать одну очередь в качестве аргумента, а при возврате эта очередь должна содержать одинаковые значения в порядке возрастания. Можно предположить, что значения находятся в диапазоне от 0 до 999.
Могу ли я поместить 100 чисел intмоя очередь и использовать функцию radixsort для ее сортировки или мне нужно поместить числа в массив, а затем массив в функцию radixsort, которая использует очереди?
Я понимаю, что мне нужно было поместить числа в очередь Int и поместить эту очередь в функцию, но это не сработало.
Но спасибо за ваши ответы, посмотрю на них и попробую решить мою проблему.Но если вы думаете, что можете помочь, пожалуйста, оставьте комментарий.