Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для MrTNTCat
1 / 1 / 0
Регистрация: 25.12.2012
Сообщений: 15

Ошибка в сортировке

30.01.2014, 14:36. Показов 1287. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такая программа:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
 
class Program
{
    static void Main()
    {
        uint friends = 8;
        uint[] apples = new uint[10];
        Random rand = new Random();
        for (int i = 0; i < apples.Length; i++)
            apples[i] = (uint) rand.Next(0, 20);
        uint tempvar;
        for (uint counter = 0;;counter++)
        {
            if (apples[counter] < apples[1 + counter])
            {
                tempvar = apples[counter];
                apples[counter] = apples[counter + 1];
                apples[counter] = tempvar;
                counter = 0;
                continue;
            }
            if(counter == apples.Length) break;
        }
        long diff = apples.Length - friends;
        Console.WriteLine("Осталось {0} яблок", diff);
        for (uint counter = friends; counter < apples.Length; counter++)
        {
            Console.WriteLine(apples[counter]);
        }
        Console.ReadKey();
    }
}
Собственно, массив заполняется случайными числами, после этого нужно его рассортировать. Собственно в сортировке и проблема. Главное что меня интересует:
C#
1
2
3
for (uint counter = 0;;counter++)
        {
            if (apples[counter] < apples[1 + counter])
Значение переменной "counter" изменяется?
Ну, и конечно, как изменить алгоритм, что бы он работал?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2014, 14:36
Ответы с готовыми решениями:

Ошибка в сортировке пузырьком
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

IComparer - ошибка при сортировке
Вообщем нужно создать сортировку. вот кусок кода public int CompareTo(TierDropDown obj) { if (obj == null) ...

Ошибка в сортировке методом пузырька
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

11
 Аватар для Дмитрий3241
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
Записей в блоге: 6
30.01.2014, 14:41
Цитата Сообщение от MrTNTCat Посмотреть сообщение
counter = 0;
Цитата Сообщение от MrTNTCat Посмотреть сообщение
if(counter == apples.Length) break;
Цикл некогда не закончится.
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
30.01.2014, 14:48
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
Цикл некогда не закончится.
Закончится, но только будет сделан лишний проход по всему массиву после сортировки.

Добавлено через 1 минуту
apples[counter] = tempvar;
Замените на apples[counter+1]=tempvar; swap невалидный.
1
 Аватар для MrTNTCat
1 / 1 / 0
Регистрация: 25.12.2012
Сообщений: 15
30.01.2014, 14:50  [ТС]
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
Цикл некогда не закончится.
Цикл идет по массиву, и при нахождении места, где число слева больше чем справа(Знак я только что исправил), числа меняются местами, а цикл переходит в начало масива. Если все уже отсортировано, цикл заканчивается. Где я допустил ошибку в алгоритме?
0
 Аватар для Дмитрий3241
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
Записей в блоге: 6
30.01.2014, 14:52
Цитата Сообщение от IamRain Посмотреть сообщение
Закончится
Запускал код, ждал около 30 секунд, ничего не произошло...
2
 Аватар для MrTNTCat
1 / 1 / 0
Регистрация: 25.12.2012
Сообщений: 15
30.01.2014, 14:53  [ТС]
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
Запускал код, ждал около 30 секунд, ничего не произошло...
В этом и проблема.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
30.01.2014, 14:54
Запускал код, ждал около 30 секунд, ничего не произошло...
Если бы свап был правильный, то закончился бы, а так логика вроде верная.

Добавлено через 20 секунд
Цитата Сообщение от MrTNTCat Посмотреть сообщение
В этом и проблема.
Написал же что сделать. )
2
 Аватар для MrTNTCat
1 / 1 / 0
Регистрация: 25.12.2012
Сообщений: 15
30.01.2014, 14:54  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Закончится, но только будет сделан лишний проход по всему массиву после сортировки.

Добавлено через 1 минуту

Замените на apples[counter+1]=tempvar; swap невалидный.
Спасибо, но теперь я постоянно выхожу за границы массива в проверке условия if'а
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
30.01.2014, 14:56
Лучший ответ Сообщение было отмечено MrTNTCat как решение

Решение

if(counter == apples.Length) break;
замените на
C#
1
if(counter == apples.Length-2) break;
1
 Аватар для MrTNTCat
1 / 1 / 0
Регистрация: 25.12.2012
Сообщений: 15
30.01.2014, 15:00  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
замените на
C#
1
if(counter == apples.Length-2) break;
Спасибо, цикл завершается.
Но вот другая проблема, что значение в нулевом индексе (apples[0]) не изменяется сортировщиком.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
30.01.2014, 15:17
Лучший ответ Сообщение было отмечено MrTNTCat как решение

Решение

Не по теме:

One minute, please.)



Добавлено через 14 минут
Сортировку вот так вот поменял. Первое что в голову пришло, попроще.)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 for (uint counter = 0; counter<apples.Length-1; counter++)
            {
                for (uint innerCounter = counter + 1; innerCounter < apples.Length; innerCounter++)
                {
                    if (apples[counter] < apples[innerCounter])
                    {
                        tempvar = apples[counter];
                        apples[counter] = apples[innerCounter];
                        apples[counter + 1] = tempvar;
                        counter = 0;
                    }
                }
            }
1
 Аватар для MrTNTCat
1 / 1 / 0
Регистрация: 25.12.2012
Сообщений: 15
30.01.2014, 15:18  [ТС]
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2014, 15:18
Помогаю со студенческими работами здесь

Ошибка в сортировке
#include &lt;iostream&gt; using namespace std; int main() { int A, c; for (int i = 0; i &lt; 3; i++) { for (int j = 0; j &lt; 3;...

Ошибка в сортировке
Помогите найти ошибку в сортировке вставками, она в счётчике коунтер, при таких раскладах вот что выдает:Массив 5 1 2 3 4 5 Полученный...

Ошибка в сортировке
Мне нужно посортировать данные по полю NAME.Код не работает.В чем ошибка? void sort(char filename) { Patients *m = new...

Ошибка в сортировке
Часть программы я сделал, но сортировка массива выходит кривой, та строка, которая после сортировки должна быть первой, внезапно...

Ошибка в сортировке
Попробовал cделать сортировка как показано в книге Библия Delphi. procedure TForm1.N8Click(Sender: TObject); begin ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru