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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2012, 01:48   #1
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию Сортировка массива по убыванию

Доброго времени суток. Прошу помощи.
<Случайно генерируем массив из 30 элементов в диапазоне от 1 до 99 необходимо отсортировать по убыванию.>
Вот то, что я набрал.. но проблема в том что неверный выдет результат(не да, это логично - иначе бы я тут не писал)..До другого варианта не додумался, просьба натолкнуть на идею..

Код:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void main()
{
	int x[30],i; int j,min;

	//генерирум рандомный масив от 1 до 99
	puts("RANDOMIZE:");
	srand(time(NULL));
	for(i=0; 30>i; i++)
	{
		x[i]=1+rand()%99;
		if(i<10)
			printf("x[%d]  = %d\n",i,x[i]);
		else
			printf("x[%d] = %d\n",i,x[i]);
	}
	

	//сортировка по убыванию
	puts("RESULT. . .");

	for(i=0;30>i;i++)
	{
		min=x[i];
		for(j=i;30>j;j++)
		{
			if(min>x[j]) min=x[j];
		}
                x[i]=min;
	}

        //выводим отсортированный массив
        for(i=0; 30>i; i++)
	{
		if(i<10)
			printf("x[%d]  = %d\n",i,x[i]);
		else
			printf("x[%d] = %d\n",i,x[i]);
	}
	
}
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 09.03.2012, 02:24   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Вот этот код
Код:
	for(i=0;30>i;i++)
	{
		min=x[i];
		for(j=i;30>j;j++)
		{
			if(min>x[j]) min=x[j];
		}
                x[i]=min;
	}
заменяет каждый элемент массива минимумом среди элементов между ним самим и концом массива. Забавно, конечно, но не то)
Почитайте про простейшие алгоритмы сортировки - пузырьком, вставками, например.

UPD

Для вывода чисел так, как Вы хотите, совсем не обязательно ничего сравнивать с десяткой, printf все сам сделает:
Код:
printf("x[%2d] = %d\n",i,x[i]);
Форматируйте код, будьте людьми.

Последний раз редактировалось Granus; 09.03.2012 в 03:01.
Granus вне форума Ответить с цитированием
Старый 17.03.2012, 00:59   #3
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

Granus, спасибо по поводу вывода

Прочитал сортировку пузырьком..И есть вопрос. Вот код.


Код:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void main()
{
	const int n=30;	int x[n],i,buf;
	//генерируем случайный массив из 30 эллементов и выводим его
	puts("RANDOMIZE:");
	srand(time(NULL));
	for(i=0; i<n; i++)
	{
		x[i]=1+rand()%99;
		printf("x[%2d] = %d\n",i,x[i]);
	}
	//сортируем по возрастанию
	for(int j=0;j<n;j++){
		for(i=0;i<n-1;i++){
			if(x[i]>x[i+1]){
				buf=x[i];
				x[i]=x[i+1];
				x[i+1]=buf;
			}
		}
	}
	//выводим отсортированный массив
	puts("RESULT . . . ");
	for(i=0; i<n; i++)
			printf("x[%2d] = %d\n",i,x[i]);
}
Интересует момент сортировки. А именно, почему во втором цикле "n-1"? Не пойму никак.
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 17.03.2012, 01:07   #4
NeoMurderer
 
Аватар для NeoMurderer
 
Регистрация: 19.04.2011
Сообщений: 9
По умолчанию

Потому что в коде написано
Код:
if(x[i]>x[i+1])
А если он будет на последнем то выйдет за пределы массива и будет сравнивать с "системным мусором"
NeoMurderer вне форума Ответить с цитированием
Старый 17.03.2012, 01:15   #5
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

Цитата:
Сообщение от NeoMurderer Посмотреть сообщение
Потому что в коде написано
Код:
if(x[i]>x[i+1])
А если он будет на последнем то выйдет за пределы массива и будет сравнивать с "системным мусором"
Это понял. То есть последний элемент x[29], и если бы не было n-1 то получилось бы что сравниваю x[29] и x[30].

Т.е. после первого просмотра массива, самый большой элемент попадает в конец, я верно понимаю? И потом массив надо просмотреть еще N раз, да?(
просто хочу понять, верно ли я принцип понимаю
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 17.03.2012, 18:27   #6
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

Цитата:
Сообщение от ArmanPrestige Посмотреть сообщение
Это понял. То есть последний элемент x[29], и если бы не было n-1 то получилось бы что сравниваю x[29] и x[30].

Т.е. после первого просмотра массива, самый большой элемент попадает в конец, я верно понимаю? И потом массив надо просмотреть еще N раз, да?(
просто хочу понять, верно ли я принцип понимаю
ответьте плз)
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива по убыванию nanoDesu Паскаль, Turbo Pascal, PascalABC.NET 4 19.12.2011 15:46
Сортировка массива по убыванию netiv Паскаль, Turbo Pascal, PascalABC.NET 2 05.11.2011 09:10
[Fortran] Сортировка столбцов массива по убыванию abit-2010 Помощь студентам 2 13.03.2011 21:46
Сортировка элементов массива по убыванию nadminka Общие вопросы .NET 1 18.05.2010 23:08