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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2011, 15:25   #1
Destinystar3422
Новичок
Джуниор
 
Аватар для Destinystar3422
 
Регистрация: 10.06.2011
Сообщений: 10
Вопрос Сортировка, не получается...

Код:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int b,d,c,e;
int a[100];
int i;

clock_t start = clock();
srand((unsigned) time(NULL));


for (i=0; i<100; i++)
     {a[i]=rand()%20; 
     printf("%d:%d\n",i,a[i]);}
/*sort--------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------*/
for (b=0; b<100; b++)
{
for (d=0; d<100; d++)
{

{if (a[d]>a[d+1])
{
c=a[d];
a[d]=a[d+1];
a[d+1]=c;
e=0;
}
else
e++;
if (e>99)
goto ide;}
}
}

/*------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
---------------------------------------------sort*/
ide:
printf("Sorbarendezett:\n");
for (e=0; e<100; e++)
{printf("%d:%d\n",e,a[e]);}
printf("\nTime elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
getchar();
}

Вся идея в том что
Код:
for (b=0; b<100; b++)
{
    for (d=0; d<100; d++)
    {
        
       {if (a[d]>a[d+1])
       {
                    c=a[d];
                    a[d]=a[d+1];
                    a[d+1]=c;
                    e=0;
       }
       else
       e++;
       if (e>99)
       goto ide;}
    }
}
должно работать следующим образом:
когда переменная е достигает 100, т.е. мы 100 раз подряд ничего не сортировали, это значит что все на своих местах, то цикл должен закончится с помощю
if (e>99)
goto ide;

но алгоритм почему-то не работает, программа запускается но не сортирует ничего...
сортировка пузырем у меня получилась а вот это как-то не хочется ;(

Последний раз редактировалось Stilet; 11.06.2011 в 15:46.
Destinystar3422 вне форума Ответить с цитированием
Старый 11.06.2011, 15:51   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Код ужасный.
Какой алгоритм вы пытаетесь реализовать?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 11.06.2011, 15:59   #3
Destinystar3422
Новичок
Джуниор
 
Аватар для Destinystar3422
 
Регистрация: 10.06.2011
Сообщений: 10
По умолчанию

да я знаю что ужасный, я только начал изучать язык С, я пытался осуществить сортировку, как пузырем, но которая кончается когда мы не сортируем подряд столько раз сколько цифр в массиве
Destinystar3422 вне форума Ответить с цитированием
Старый 11.06.2011, 16:02   #4
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Удалите пожалуйста этот пост

Последний раз редактировалось coNsept; 11.06.2011 в 20:20.
coNsept вне форума Ответить с цитированием
Старый 11.06.2011, 16:03   #5
Scaevola
Пользователь
 
Аватар для Scaevola
 
Регистрация: 08.06.2011
Сообщений: 25
По умолчанию

http://algolist.manual.ru/
Scaevola вне форума Ответить с цитированием
Старый 11.06.2011, 16:24   #6
Destinystar3422
Новичок
Джуниор
 
Аватар для Destinystar3422
 
Регистрация: 10.06.2011
Сообщений: 10
По умолчанию

Спасибо Scaevola, но мне не нужны готовые алгоритмы, я хочу научится писать их сам.

coNsept, я воспользовался твои кодом, теперь моя программа выглядит следующим образом:



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


int main()
{
int k = 0;
int Arr[100];

clock_t start = clock();
srand((unsigned) time(NULL));
for (int i=0; i<100; i++)
     {Arr[i]=rand()%20; 
     printf("%d:%d\n",i,Arr[i]);}
for (int i = 0; i < 200; ++i) {
 for (int j = 0; j < 200 - i - 1; ++j) {
  if (Arr[j] > Arr[j + 1]) {
   int Temp = Arr[j];
   Arr[j] = Arr[j + 1];
   Arr[j + 1] = Temp;
  }
  else {
   ++k;
   if (k > 99) {
    break;
   }
  }
 }
}
printf("\n\n\nsorted : \n\n\n");
for (int x=0; x<100; ++x)
printf("%d:  %d\n",x,Arr[x]);


printf("\nTime elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
getchar();
}
но она все еще не работает...

From Stilet: Выделяй код спецтегом по кнопке #.

Последний раз редактировалось Stilet; 11.06.2011 в 16:39.
Destinystar3422 вне форума Ответить с цитированием
Старый 11.06.2011, 20:20   #7
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Может тебе вот так надо? С маленькой оптимизацией пузырька.

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

const int ARRSIZE = 20;

int main()
{
 int *Arr = new int[ARRSIZE];
 clock_t start = clock();
 srand((unsigned int)time(NULL));

 for (int i = 0; i < ARRSIZE; ++i)  
  printf("[%2d]: %2d\n", i + 1, Arr[i] = rand() % 20);
     
 for (int i = 0; i < ARRSIZE; ++i) {
  bool Allow = true;
  for (int j = 0; j < ARRSIZE - i - 1; ++j) {
   if (Arr[j] > Arr[j + 1]) {
    int Temp = Arr[j];
    Arr[j] = Arr[j + 1];
    Arr[j + 1] = Temp;  
    Allow = false;
   } 
  }
  if (Allow)
   break;
 }
 
 printf("\n[Sorted]\n\n");
 
 for (int i = 0; i < ARRSIZE; ++i)
  printf("[%2d]: %2d\n", i + 1, Arr[i]); 
 printf("\nTime elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);

 getch();
 delete [] Arr;
 return 0;
}
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

const int ARRSIZE = 50;

void Output(int *Arr, int Size) {
 for (int i = 0; i < Size; ++i)
  printf("[%2d]: %2d\n", i + 1, Arr[i]);
}

int *BubleSort(int *Arr, int Size) {
 for (int i = 0; i < Size; ++i) {
  bool Allow = true;
  for (int j = 0; j < Size - i - 1; ++j) {
   if (Arr[j] > Arr[j + 1]) {
    int Temp = Arr[j];
    Arr[j] = Arr[j + 1];
    Arr[j + 1] = Temp;  
    Allow = false;
   } 
  }
  if (Allow)
   break;
 }
 return Arr;
}

int main()
{
 int *Arr = new int[ARRSIZE];
 clock_t start = clock();
 srand((unsigned int)time(NULL));

 for (int i = 0; i < ARRSIZE; ++i)  
  printf("[%2d]: %2d\n", i + 1, Arr[i] = rand() % 20);
     
 printf("\n[Sorted]\n\n");
 
 Output(BubleSort(Arr, ARRSIZE), ARRSIZE);
  
 printf("\nTime elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
 getch();
 delete [] Arr;
 return 0;
}

Последний раз редактировалось coNsept; 11.06.2011 в 20:44.
coNsept вне форума Ответить с цитированием
Старый 11.06.2011, 20:25   #8
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Ну или твой вариант, если 100 раз ничего не сортируется, тогда выходим из цикла.

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

const int ARRSIZE = 200;
const int SORTLIMIT = 100;

int main()
{
 int *Arr = new int[ARRSIZE];
 clock_t start = clock();
 srand((unsigned int)time(NULL));

 for (int i = 0; i < ARRSIZE; ++i)  
  printf("[%2d]: %2d\n", i + 1, Arr[i] = rand() % 20);
     
 for (int i = 0, Check = 0; i < ARRSIZE; ++i) {
  for (int j = 0; j < ARRSIZE - i - 1; ++j) {
   if (Arr[j] > Arr[j + 1]) {
    int Temp = Arr[j];
    Arr[j] = Arr[j + 1];
    Arr[j + 1] = Temp;  
   } 
   else {
    Check++;
   }
  }
  if (Check >= SORTLIMIT)
   break;
 }
 
 printf("\n[Sorted]\n\n");
 
 for (int i = 0; i < ARRSIZE; ++i)
  printf("[%2d]: %2d\n", i + 1, Arr[i]);
  
 printf("\nTime elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
 getch();
 delete [] Arr;
 return 0;
}
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

const int ARRSIZE = 50;
const int SORTLIMIT = 100;

void Output(int *Arr, int Size) {
 for (int i = 0; i < Size; ++i)
  printf("[%2d]: %2d\n", i + 1, Arr[i]);
}

int *BubleSort(int *Arr, int Size) {
 for (int i = 0, Check = 0; i < Size; ++i) {
  for (int j = 0; j < Size - i - 1; ++j) {
   if (Arr[j] > Arr[j + 1]) {
    int Temp = Arr[j];
    Arr[j] = Arr[j + 1];
    Arr[j + 1] = Temp;  
   } 
   else {
    Check++;
   }
  }
  if (Check >= SORTLIMIT)
   break;
 }
 return Arr;
}

int main()
{
 int *Arr = new int[ARRSIZE];
 clock_t start = clock();
 srand((unsigned int)time(NULL));

 for (int i = 0; i < ARRSIZE; ++i)  
  printf("[%2d]: %2d\n", i + 1, Arr[i] = rand() % 20);
     
 printf("\n[Sorted]\n\n");
 
 Output(BubleSort(Arr, ARRSIZE), ARRSIZE);
  
 printf("\nTime elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
 getch();
 delete [] Arr;
 return 0;
}

Последний раз редактировалось coNsept; 11.06.2011 в 20:41.
coNsept вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
не получается сортировка матрицы в чем ошибка? Darki Паскаль, Turbo Pascal, PascalABC.NET 5 23.06.2010 00:26
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
структуры. не получается сортировка. grewnica Общие вопросы C/C++ 2 12.05.2009 14:49
не получается сортировка кто знает помогите Droid Общие вопросы Delphi 5 23.05.2008 07:28