Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
vezunchik95
0 / 0 / 2
Регистрация: 27.02.2014
Сообщений: 50
#1

"Быстрая" сортировка работает некорректно - C (СИ)

26.04.2014, 14:40. Просмотров 376. Ответов 0
Метки нет (Все метки)

Ребят, пишу быструю сортировку, проблема возникает. Вот часть кода с заполнением массива случайными числами:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
char kol[20];
void quicksort(float* M, int i, int j);
float MASS[MAX];
int i, j;
 
int main
{
                     srand(time(NULL));
                      
                      printf("\nВведите количество элементов массива (0 < n <= 40): ");
                      scanf("%s", &kol);
                      
                       while(atoi(kol) == 1)
                      {
                          printf("\nНедостаточно элементов для сортировки!");
                          printf("\nВведите количество элементов массива (0 < n <= 40): ");
                          scanf("%s", &kol);
                      }  
                      
                      while ( (atoi(kol) <= 0) || (atoi(kol) > 40) )
                      {
                          printf("\nОшибка!");
                          printf("\nВведите количество элементов массива (0 < n <= 40): ");
                          scanf("%s", &kol);
                          
                      }
                      
                      for(i=0; i<atoi(kol); i++)
                      {
                               MASS[i] = 0 + rand()%99;
                      }
                      
                      printf("\n\nПОЛУЧЕННЫЙ МАССИВ:\n\n");
                      
                      for(i=0; i<atoi(kol); i++)
                      {
                               
                               printf(" %.0f", MASS[i]);
                      }
 
                      i = 0;
                      j = atoi(kol)-1; 
    
                      quicksort(MASS, i, j);
    
                      printf("\n\n");
                      printf("ОТСОРТИРОВАННЫЙ МАССИВ:");
    
                     for(i=0; i<atoi(kol); i++)
                 {
                      printf(" %.0f", MASS[i]);
                 }
 
    system("PAUSE>>void");
    return 0;
}
 
void quicksort(float* M, int i, int j)
    {
          float k, vrem;
          k = M[(i+j)/2];
          
          do
          {
              while(M[i] < k) i++;
              while(M[j] > k) j--;
              
              
              if (i <= j)
              {
                   vrem = M[i];
                   M[i] = M[j];
                   M[j] = vrem;
                   i++;
                   j--;
              }
             
          } while(i < j);
          
          if(j > 0) quicksort(MASS, 0, j); 
          // if(i < (atoi(kol)-1) ) quicksort(MASS, i, (atoi(kol)-1) );
    
    }
Разделение по опорному элементу и рекурсивная сортировка левой части вроде работает, хотя иногда почему то некоторый элемент перепрыгнет не на свое место ни с того ни с сего. Но главная проблема с рекурсивным вызовом правой части массива, с закомментированной строкой. При ее вводе программа перестает работать и выдает ошибку, т.е. не сортирует одновременно левую и правую часть. Подскажите, что не так, желательно подробнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2014, 14:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос "Быстрая" сортировка работает некорректно (C (СИ)):

Сортировка подсчетом и ошибка "Невозможно преобразовать "void*" в "int*"
Мне нужно отсортировать одномерный массив с помощью алгоритма сортировки,...

Создать запись "Двигатель", которая содержит элементы "Название", "Мощность", "Скорость", "Цена"
Создать запись &quot;Двигатель&quot;, которая содержит элементы &quot;Название&quot;, &quot;Мощность&quot;,...

Не могу понять почему не работает в первом кейсе "Suma modyley posle 0" и "Masiv 2(spo4atku parni pozicii)"
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

Ввести структуру "историческое событие" с полями "число", "месяц", "год", "событие"
Ввести структуру ИСТОРИЧЕСКОЕ СОБЫТИЕ с полями ЧИСЛО, МЕСЯЦ, ГОД, СОБЫТИЕ....

Быстрая сортировка не работает
Ребята помогите довести до ума прогу. :cry: Прога сама случайным образом...

Подсчитать общее количество вхождений в строку символов "А", "a", "B" и "b"
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; main() { ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2014, 14:40
Привет! Вот еще темы с решениями:

Быстрая сортировка работает наполовину
Всем здрасте,проблемка есть. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; ...

Быстрая сортировка работает неправильно
Здравствуйте! Разбираюсь с быстрой сортировкой и что-то пошло не так. ...

"Перевернуть" в строке все слова (Например: "Жили были" в "илиЖ илыб")
&quot;Перевернуть&quot; в строке все слова. (Например: &quot;Жили были дед и баба&quot; - &quot;илиЖ...

Сортировка слиянием работает некорректно
Здравствуйте! Читаю Алгоритмы. Построение и анализ. Томас Кормен, Чарльз...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru