Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка массива, Нужна критика 
:(
    Опции темы
Kurganec
  Дата 16.1.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 6.6.2008
Где: СПБ

Репутация: нет
Всего: нет



ПРиветствую!

можно ли считать этот алгоритм для сортировки элементов массива работоспособным?
если есть недочёты - напишите плз =) (кроме строки  sw=a[k]; a[k]=a[i];a[i]=sw;)
Код

#include "stdio.h"
#define AR 15

int main()
{
int a[AR]={1,2,5,2,4,8,15,13,65,15,35,74,59,24,13};
int i,sw,k;
//вывод массива до сортировки
for (i=0;i<AR;i++) printf("%3i",a[i]);
printf("\n");
//сортировка
k=0;
while (k!=AR)
{
for (i=k+1;i<AR;i++)
{
if (a[i]<a[k])
{
sw=a[k]; a[k]=a[i];a[i]=sw;//меняем
}
}
k++;
}
//вывод массива после сортировки
for (i=0;i<AR;i++)printf("%3i",a[i]);
getchar();

return 0;
}


и ещё, если что-то подобное уже писалось, то как он называется? (там я знаю есть пузыриком, вставками...)

Благодарю
PM MAIL ICQ Skype   Вверх
Lazin
Дата 16.1.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



медленно - О(N*N)
PM MAIL Skype GTalk   Вверх
Kurganec
Дата 16.1.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 6.6.2008
Где: СПБ

Репутация: нет
Всего: нет



я писал его сам и моя задача была написать работоспособный код.
то что долго по сравнению с другими - мне сейчас не важно.
лижбы рабочий...


PM MAIL ICQ Skype   Вверх
tracrium
Дата 17.1.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.1.2009

Репутация: нет
Всего: нет



Мне кажется что да, хотя я не силен.
PM MAIL WWW   Вверх
stat007
Дата 17.1.2009, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Лучше всего использовать алгоритм sort из STL.
PM MAIL   Вверх
mes
Дата 17.1.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Kurganec @  16.1.2009,  16:25 Найти цитируемый пост)
//сортировка
k=0;
while (k!=AR)
{
for (i=k+1;i<AR;i++)
{
if (a[i]<a[k])
{
sw=a[k]; a[k]=a[i];a[i]=sw;//меняем
}
}
k++;
}


мне кажется так будет и эффективнее и нагляднее :
Код

for (int k=1; k<AR; ++k)
for (int i=k; i>0; --i)
if (a[i]<a[i-1])  { меняем }
else break;


Добавлено через 2 минуты и 37 секунд
Цитата(stat007 @  17.1.2009,  19:12 Найти цитируемый пост)
Лучше всего использовать алгоритм sort из STL. 

std это C++, a у ТС судя по коду чистый си.

Это сообщение отредактировал(а) mes - 17.1.2009, 21:30


--------------------
PM MAIL WWW   Вверх
stat007
Дата 17.1.2009, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Цитата

std это C++, a у ТС судя по коду чистый си.


а ну если Си, то тогда незнаю, я пользуюсь С++. 
Непонимаю даже, зачем пользуются С, если сейчас лучше пользоваться С++, т.е. намного проще он и усовершенен!
PM MAIL   Вверх
AnLun
Дата 17.1.2009, 22:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.1.2008

Репутация: нет
Всего: нет



Только на С уже много чего написано, так что если чего старое править...
Тем более, что С++ проще, по-моему спорно - главное преимущество С++(ООП) уже перетягивает халат 'сложности'... Но С++ удобней ИМХО


Это сообщение отредактировал(а) AnLun - 17.1.2009, 22:31
PM MAIL   Вверх
Kurganec
Дата 20.1.2009, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 6.6.2008
Где: СПБ

Репутация: нет
Всего: нет



С пишу, т.к. только начал изучать язык. к тому же я не знаю чем они отличаются...

вот например как выглядел бы мой код в си++?


AnLun, сложно читать серый текст на белом фоне   smile 
PM MAIL ICQ Skype   Вверх
vinter
Дата 20.1.2009, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Цитата(Kurganec @  20.1.2009,  08:45 Найти цитируемый пост)
вот например как выглядел бы мой код в си++?

Код

#include <iostream>
#include <algorithm>
#define AR 15

int main()
{
    int a[AR]={1,2,5,2,4,8,15,13,65,15,35,74,59,24,13};
    //Вывод до
    std::copy(&a[0], &a[sizeof(a)/sizeof(int)], std::ostream_iterator<int>(std::cout, '\n'));
    //Сортировка
    std::sort(&a[0], &a[sizeof(a)/sizeof(int)])
    // Вывод после
    std::copy(&a[0], &a[sizeof(a)/sizeof(int)], std::ostream_iterator<int>(std::cout, '\n'));
    std::cin.get();
    return 0;
}



Цитата(Kurganec @  20.1.2009,  08:45 Найти цитируемый пост)
AnLun, сложно читать серый текст на белом фоне   

выдели его ;)


Это сообщение отредактировал(а) vinter - 20.1.2009, 09:17


--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 20.1.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(vinter @  20.1.2009,  08:16 Найти цитируемый пост)
#define AR 15 

это лишнее -  AR не нужен.

взял на себя смелость немножко изменить код, чтоб C++ не испугал новичков.
Код

#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
    int a[]={1,2,5,2,4,8,15,13,65,15,35,74,59,24,13};
    const int n = sizeof(a)/sizeof(int);
    std::ostream_iterator<int> my_out (std::cout, " "); // итератор вывода в стандартный поток чисел типа int с пробелом в качестве разделителя.

    //Вывод до :
    std::copy(a, a+n, my_out);
    std::cout<<std::endl; // перевод строки

    //Сортировка  :
    std::sort(a, a+n);

    // Вывод после :
    std::copy(a, a+n, my_out);
    std::cout<<std::endl;  // перевод строки

    std::cin.get();
    return 0;
}


Это сообщение отредактировал(а) mes - 20.1.2009, 14:35


--------------------
PM MAIL WWW   Вверх
Kurganec
Дата 21.1.2009, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 6.6.2008
Где: СПБ

Репутация: нет
Всего: нет



mes, ААААА ужас, я ни строки ни понимаю в этом!!!! ты меня ужасно напугал!
удивляет сортировка массива в 1 строку smile (предполагаю сто это из "#include <algorithm>")
std::cin.get(); вроде считывает символ.
более ни одной строки не понятнога

больше ничего не понял.
наверное рано для меня это. ведь ничего страшного, если Си изучить, а потом на Си++ / Си # перейти?

PS: имхо код Си ++ выглядит более эстетичным   smile 








Это сообщение отредактировал(а) Kurganec - 21.1.2009, 23:19
PM MAIL ICQ Skype   Вверх
Kallikanzarid
Дата 22.1.2009, 03:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



C/С++ - это целая битва smile В разных ситуациях предпочтение отдается тому или иному языку.
PM MAIL   Вверх
Kurganec
Дата 22.1.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 6.6.2008
Где: СПБ

Репутация: нет
Всего: нет



Kallikanzarid, ты меня успокоил  smile 

вообще если чесно меня интересовал сам алгоритм сортировки. но всё равно всем спасибо smile
последний вопрос -  как можно посмотреть std::sort(a, a+n) ?  

ну в плане код/алгоритм?

Это сообщение отредактировал(а) Kurganec - 22.1.2009, 14:49
PM MAIL ICQ Skype   Вверх
mes
Дата 22.1.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



загляните в файл <stl_algo.h>  smile   (но хотелось бы предупредить, что пока рановато это делать)smile


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.