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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2009, 23:56   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию C++ сортировка массива - нужна подсказка

Пузырьковая сортировка массива - программа считает прекрасно, но выдает вначале страшное - -858993460 , а потом нормально сортирует в сторону увеличения,за исключением того, что этот -858993460 "съедает" последнюю цифру сортировки. Зато совершенно замечательно сортирует в сторону уменьшения. Я понимаю, что -858993460 - некая ошибка(один из вариантов - что-то вначале не было обнулено), но я уже перекрутила все возможности, воз и ныне там.
Господа профессионалы, помогите сделать красиво - я слабовата в программировании((


Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>


using namespace std;

void BubbleSort ( int A[10], int n);
void BubbleSortMin (int A[10],int n);

void BubbleSort (int A[10], int n)
{
	int i, j, buf;
	int LastExchangeIndex;
   i=n-1;
    for(i=0; i<n;i++)
       for (j=0; j<n; j++)
          if (A[ j+1 ] < A [ j ]) 
          {
				buf = A[j+1];
				A[j+1] = A[j];
				A[j] = buf;
				LastExchangeIndex =j;
		  }
		  i= LastExchangeIndex;
}

void BubbleSortMin (int A[10], int n)
{
	int i, j, buf1;
	
	int LastExchangeIndex1;
   i=n-1;
    for(i=0; i<n;i++)
       for (j=0; j<n; j++)
          if (A[ j+1 ] > A [ j ]) 
          {
				buf1 = A[j+1];
				A[j+1] = A[j];
				A[j] = buf1;
				LastExchangeIndex1 =j;
		  }
		  i= LastExchangeIndex1;
}


int main()
{
	
	srand((unsigned)time(NULL));
	int A[10];  //massiiv
	int i;
	int k=10, size =10;
	for(i = 0; i<size;  i++)
	{
		A[i]=rand()%100;      
		cout<<A[i]<<" ";
		if((i+1)%k==0)cout<<endl;
	}
	
	cout<<endl;
	cout<<"****************************************************************"<<endl;
	BubbleSort(A,10);
    
	for(i=0;i<10;i++)
	{
		cout<<A[i]<<" ";
		if((i+1)%k==0)cout<<endl;
	}
cout<<endl;
cout<<"************************************************"<<endl;
	BubbleSortMin(A,10);  
	for(i=0;i<10;i++)
	{
		cout<<A[i]<<" ";
		if((i+1)%k==0)cout<<endl;
	}
	

	getch();
	return 0;
}
Убедительная просьба: не предлагайте к использованию классы - мы их еще не проходили))) И хочется массивчик покрупнее - не 1000 конечно, а хотя бы 100. Я уже боюсь крутить дальше - запутаюсь окончательно)).
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 25.11.2009 в 00:12.
Blondy вне форума Ответить с цитированием
Старый 25.11.2009, 00:13   #2
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
По умолчанию

Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
void BubbleSort ( int A[10], int n);
void BubbleSortMin (int A[10],int n);

void BubbleSort (int A[10], int n)
{
	int i, j, buf;
	int LastExchangeIndex;
    for(i=0; i<n; i++)
       for (j=0; j<n-1; j++)
          if (A[j+1]<A[j]) 
          {
				buf=A[j+1];
				A[j+1]=A[j];
				A[j]=buf;
				LastExchangeIndex =j;
		  }
		  i=LastExchangeIndex;
}

void BubbleSortMin (int A[10], int n)
{
	int i, j, buf1;
	int LastExchangeIndex1;
    for(i=0; i<n;i++)
       for (j=0; j<n-1; j++)
          if (A[ j+1 ] > A [ j ]) 
          {
				buf1 = A[j+1];
				A[j+1] = A[j];
				A[j] = buf1;
				LastExchangeIndex1 =j;
		  }
		  i= LastExchangeIndex1;
}

int main()
{
	
	srand((unsigned)time(NULL));
	int A[10];  //massiiv
	int i;
	const int size=10;
	for(i = 0; i<size;  i++)
	{
		A[i]=rand()%100;      
		cout<<A[i]<<" ";
	}
	cout<<"\n************************************************"<<endl;
	BubbleSort(A,size);
   	for(i=0;i<size;i++)
	{
		cout<<A[i]<<" ";
	}
    cout<<"\n************************************************"<<endl;
	BubbleSortMin(A,size);  
	for(i=0;i<size;i++)
	{
		cout<<A[i]<<" ";
	}
_getch();
return 0;
}
вот так работает вроде. всех дел то
Код:
 for (j=0; j<n-1; j++)
n-1 нужно писать, а то там дальше A[j+1], вылезаете за массив.
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.

Последний раз редактировалось forsaken66; 25.11.2009 в 00:21. Причина: еще более оптимально
forsaken66 вне форума Ответить с цитированием
Старый 25.11.2009, 00:17   #3
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Ага, спасибо, сейчас буду проверять - я как вижу эти страшные цифры - пугаюсь жутко )))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 25.11.2009, 00:26   #4
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Точно, как в аптеке)))
Не могли бы Вы помочь увеличить массивчик - если 10 я меняю на 100 -у меня не получается(((
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 25.11.2009, 00:32   #5
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
По умолчанию

Пожалуйста. Нужно просто везде размер поменять. int A[100] и int size=100;

Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
void BubbleSort ( int A[100], int n);
void BubbleSortMin (int A[100],int n);

void BubbleSort (int A[100], int n)
{
	int i, j, buf;
	int LastExchangeIndex;
    for(i=0; i<n; i++)
       for (j=0; j<n-1; j++)
          if (A[j+1]<A[j]) 
          {
				buf=A[j+1];
				A[j+1]=A[j];
				A[j]=buf;
				LastExchangeIndex =j;
		  }
		  i=LastExchangeIndex;
}

void BubbleSortMin (int A[100], int n)
{
	int i, j, buf1;
	int LastExchangeIndex1;
    for(i=0; i<n;i++)
       for (j=0; j<n-1; j++)
          if (A[ j+1 ] > A [ j ]) 
          {
				buf1 = A[j+1];
				A[j+1] = A[j];
				A[j] = buf1;
				LastExchangeIndex1 =j;
		  }
		  i= LastExchangeIndex1;
}

int main()
{
	
	srand((unsigned)time(NULL));
	int A[100];  //massiiv
	int i;
	const int size=100;
	for(i = 0; i<size;  i++)
	{
		A[i]=rand()%100+1;      
		cout<<A[i]<<" ";
	}
	cout<<"\n************************************************"<<endl;
	BubbleSort(A,size);
   	for(i=0;i<size;i++)
	{
		cout<<A[i]<<" ";
	}
    cout<<"\n************************************************"<<endl;
	BubbleSortMin(A,size);  
	for(i=0;i<size;i++)
	{
		cout<<A[i]<<" ";
	}
_getch();
return 0;
}
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
forsaken66 вне форума Ответить с цитированием
Старый 25.11.2009, 00:42   #6
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Вот и мне не хватило одного байта))))
Как все просто)))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 25.11.2009, 00:44   #7
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
По умолчанию

Ну да, ничего сложного
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.
forsaken66 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива. Нужна помощь. vitaly38 Помощь студентам 8 13.05.2010 15:32
С++Builder нужна подсказка Yanat Помощь студентам 0 02.11.2009 18:28
Нужна подсказка! (StringGrid) Mr.User Помощь студентам 14 02.12.2007 23:22
нужна подсказка по MYSQL!!! Noor Помощь студентам 5 03.04.2007 10:52