Сортировка массива вручную в порядке возрастания

У меня есть домашнее задание, чтобы отсортировать массив в порядке возрастания. Очевидно, что это должно быть сделано вручную без использования каких-либоsort() функция.

Я решил сделать это, мне нужно дваfor циклы: первый будет проходить через существующий массив и создавать временное значение со значением и индексом массива. Второй цикл будет сравнивать временные значения с существующими значениями и сортировать их. Я продолжаю пытаться написать код, но просто не могу понять, как это правильно. Вот последний метод, который я придумал:

public int[] sortArray (int[] inArray)
{
    //Construct the array we're using here
    int[] newArray = inArray;

    for(int x = 0; x < a.length; x++) //a.length = # of indices in the array
    {
        int tempValue = a[x];
        int tempIndex = x;

        for(int y = 0; y < a.length; y++)
        {
            if(tempValue < a[y])
            {
                newArray[x] = tempValue;
            }
        }
    }

    return newArray;
}

Я уверен, что это неправильно, но если бы кто-то мог подтолкнуть меня в правильном направлении, это было бы очень признательно!

 Petr Janeček29 мар. 2012 г., 16:50
Вы используете переменнуюa который нигде не видно. Используйте inArray вместо него. Правильный способ создать новый массивint[] newArray = new int[inArray.length];.
 alexis29 мар. 2012 г., 16:46
Если вас явно не попросили придумать алгоритм сортировки, я рекомендую найти простой и реализовать его в своем коде. И вместо того, чтобы быть «почти уверенным» в том, что ваш код неверен, просто протестируйте его и выясните.
 Andrew De Forest29 мар. 2012 г., 16:47
Да, алгоритм должен быть моим. И «почти уверен, что это не работает», я имею в виду, что это не работает, но я надеюсь, что нужно лишь немного изменить код, чтобы он заработал, вместо того, чтобы начинать с нуля снова.
 twain24929 мар. 2012 г., 16:46
Вы должны использовать определенный алгоритм сортировки?
 Magrangs29 мар. 2012 г., 16:45
Возможно, стоит сначала взглянуть на псевдокод для различных алгоритмов сортировки:maven.smith.edu/~thiebaut/java/sort

Ответы на вопрос(7)

int minval = input[0];
int temp=0;


for(int i = 0; i< input.length; i++)
{ 
    for(int j = 0; j< input.length-1; j++)
    {
        if(input[j+1]<input[j])
        {
            temp=input[j+1];
            input[j+1]=input[j];
            input[j]=temp;  
        }
    }
}
 Jens30 сент. 2016 г., 15:49
Не добавляйте только код. опишите, что вы сделали
 Stergios Zg.23 апр. 2017 г., 12:34
Что делаешь??? Минвал не используется
int arr[] = new int[]{10, 20, 5, 6, 30, 1, 2};
    boolean bool = true;
    int t = 0;
    while (bool) {
        for (int i = 0; i < arr.length - 1; i++) {
            if (arr[i] > arr[i + 1]) {
                int c = arr[i];

                arr[i] = arr[i + 1];
                arr[i + 1] = c;
                t++;
            }
        }
        if (t == 0) {
            bool = false;
        }
        t = 0;
    }

    for (int y : arr) {
        System.out.println(y);
    }
 Jens30 сент. 2016 г., 15:49
Не добавляйте только код. опишите, что вы сделали

чтобы пытаться изобрести свой собственный алгоритм сортировки, я призываю вас изучить то, что уже существует. Этотонна предшествующего уровня техники в этом.

Взгляните на статью в Википедии:Алгоритм сортировки.

Пузырьковая сортировка очень прост в реализации, но имеет квадратичную сложность (так же, как ваша текущая попытка).

Quicksort не слишком сложен в реализации и имеет лучшую среднюю сложность.

int[] number = { 1,2,1,3,5,4 };
    int temp;
     for (int i = 0; i < number.length; i++)
        {
            for (int j = i + 1; j < number.length; j++)
            {
                if (number[i] > number[j])
                {
                    temp =  number[i];
                    number[i] = number[j];
                    number[j] = temp;
                }
            }
        }

        for (int i = 0; i <number.length; ++i)
            System.out.println(number[i]);
    }
 Jens29 сент. 2016 г., 15:35
Не добавляйте только код. Добавить описание также
 Toby Speight29 сент. 2016 г., 16:15
Добро пожаловать в переполнение стека! Хотя этот код может помочь решить проблему, он не объясняетПочему и / иликак это отвечает на вопрос. Предоставление этого дополнительного контекста значительно улучшило бы его долгосрочную образовательную ценность. пожалуйстаредактировать Ваш ответ, чтобы добавить объяснение, в том числе, какие ограничения и предположения применяются.
Решение Вопроса

У вас почти нормальная версияВыбор Сортировщик, Вы должны начать свойy вx+1не в0, В противном случае вы повторно сканируете отсортированную часть массива. Следует также отметить, что сортировка выбора является алгоритмом на месте; если вы хотите сделатькопия массива, вы должны использоватьArrays.copy метод, в противном случаеint[] newArray = inArray; создает псевдоним, а не копию. Наконец,if оператор во вложенном цикле долженпоменять местами a[x] а такжеa[y]не просто поставитьtempValue в:

if(newArray[x] < newArray [y]) {
    int tempValue = newArray[y];
    newArray[y] = newArray[x];
    newArray[x] = tempValue;
}
 Andrew De Forest29 мар. 2012 г., 17:13
Не могли бы вы подробнее остановиться на части подкачки?
 Andrew De Forest29 мар. 2012 г., 17:27
Спасибо за совет оArrays.copy! Я как бы пропустил это, но оказалось, что это была моя проблема :)
 dasblinkenlight29 мар. 2012 г., 17:17
@AndrewDeForest уверен, пожалуйста, смотрите редактирование.

Пузырьковая сортировка - Википедия довольно хороша, вы должны ее прочитать. Тем не менее, он никогда не используется, потому что есть лучшая альтернатива -Вид вставки (Примером является Timsort в Python, который является гибридом сортировки Merge и сортировки Insertion). Эти два основных алгоритма, которые соответствуют вашей идее с двумя циклами, следовательно, O (n2сложность.

Вы также должны рассмотреть различные алгоритмы для вашего задания или, по крайней мере, знать:

Сортировка слияниемQuicksort

Надеюсь, это поможет.

Ваш ответ на вопрос