Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2015, 10:49   #1
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию Проблема с сортировкой массива

Visual Studio пока не работает у меня, поэтому на время решил воспользоваться сайтом http://cpp.sh/ ( Не поддерживает русский, функцию void и не позволяет инициализировать переменную в цикле )

Нужно сделать сортировку массива пузырьковым методом без использования функции bubble_sort

Код:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
	setlocale(LC_ALL, "rus");
	const int N = 6;
	int m[N], a = 0, i=0,j=i+1;
	for (int i = 0; i < N; i++)
	{
		cout << "insert " << i << " element of massive\n" << endl;
		cin >> m[i];
	}
    for (i=0;i<N;i++)
    {
    for (j=i+1;j<N+1;j++)
    {
        if(m[i]>m[j]) {
            a=m[i];
            m[i]=m[j];
            m[j]=a;
            }
    for (int i = 0; i < N; i++)
			cout << m[i] << " ";
		cout << endl;
    }
    }
	system("pause");
}


Когда выполняю, сравнение с 0 элементом массива проходит на ура, но дальше в 0й элемент засовывается 0:




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

Как мне оформить функцию вывода на экран, чтобы не было вывода кучи одинаковых массивов, но при этом показывалось сравнение каждого элемента?
http://cpp.sh/82jk
jirtreck вне форума Ответить с цитированием
Старый 21.10.2015, 11:16   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
for (j=i+1;j<N+1;j++)
Откуда взялся элемент N+1 если в массиве N элементов?!
Уберите +1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.10.2015, 11:23   #3
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию

Благодарю!
Почему-то думал, что если j начинается c 1, то надо просчитать 6 раз ( Когда по-умному нужно 5 ).

Теперь все идеально работает

Последний раз редактировалось jirtreck; 21.10.2015 в 11:27.
jirtreck вне форума Ответить с цитированием
Старый 21.10.2015, 11:28   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не за что!

на будущее.
Какой бы алгоритм обработки Вы не использовали, индексы не должны выходить за границы. Нельзя обратиться к -1 элементу, или элементу N+1 - это ошибка.
То, что Вам программа позволила "вылезти" за границы (кстати, думаю, что это можно настроить в опциях IDE/компилятора, чтобы границы индексов контролировались), это не означает, что это не ошибка!

Успехов в учёбе!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с сортировкой двумероного массива Axelvox C# (си шарп) 0 03.12.2014 23:10
Проблема с сортировкой массива VB Heng Помощь студентам 3 25.09.2013 14:08
Проблема с сортировкой массива GaJIbI4 Помощь студентам 7 04.01.2012 02:05
задача с сортировкой массива, java dungle Помощь студентам 0 17.12.2011 16:40
Просьба помочь с сортировкой массива по убыванию Ветас Помощь студентам 6 11.11.2009 16:30