Сортировка массива в C от низкого до высокого (без использования qsort) - PullRequest
4 голосов
/ 10 декабря 2010

У меня есть функция, которая принимает массив чисел и сортирует их по возрастанию. Пока что у меня есть этот алгоритм, однако результат не соответствует ожиданиям. Может кто-то пролить свет на это. Я не могу использовать какие-либо функции библиотеки C.

/* 
   Sort "count" numbers stored in array numbers[] in non-decreasing order.
   There may be duplicate numbers in the array.
   You may use any sorting algorithm that you know.
 */

void sort( double numbers[], int count )
{
    int i, j, k;
    //printf("%d", count);

    double temp;
    do{
        j = 0;  
        for (i = 0;i<=count;i++){
                if (numbers[i] > numbers[i+1]){//this was numbers[k], which was an error
                    j = 1;
                    temp = numbers[i];
                    numbers[i] = numbers[i+1];
                    numbers[i+1] = temp;
                }
            }
    } while (j == 1);
}

Ответы [ 5 ]

5 голосов
/ 10 декабря 2010

Неверное условие в for loop i<=count.

Допустимый индекс в массиве: от 0 до count-1.
Поскольку вы получаете доступ к значению по индексу i+1 в цикле:

if (numbers[i] > numbers[i+1])

i может принимать значение от 0 до count-2, поэтому измените условие на i<=count-2 или i<count-1

5 голосов
/ 10 декабря 2010

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

0 голосов
/ 10 декабря 2010

Вы не инициализированы k.

Алгоритм остановится, как только он переместит только одно число.Вам нужно переместить их все.

Я думаю, что вы пропустили цикл for на k вне цикла while, но, поскольку я не совсем уверен, что вы пытаетесь сделать здесь, я могу 'не быть уверенным.

Почему вы не можете реализовать свою собственную функцию qsort ()?Это разрешено?Попробуйте прочитать несколько алгоритмов сортировки онлайн.

0 голосов
/ 10 декабря 2010

if (numbers [i]> numbers [k]) {

, вероятно, должно быть

if (numbers [i]> numbers [i + 1]) {

k вообще не используется.

for (i = 0;i <= count;i++){

, вероятно, должно быть

for (i = 0; i < count-1;i++){

, поскольку есть только элементы от 0 до count-1, и затем вы сравниваетек следующему.Имя для j дерьмо.Сделайте логическое значение didSwap.А потом переосмыслите свою кодировку, может быть, это просто наоборот ...

0 голосов
/ 10 декабря 2010

Используется значение k, но переменная никогда не инициализируется и не присваивается. В какой-то момент ваш код попытается получить доступ к значению numbers[count], когда массив, содержащий count элементов, имеет максимальный индекс count-1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...