0 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 12
1

Блинная сортировка (является этот код им, если нет исправьте)

08.06.2016, 11:59. Показов 1652. Ответов 4
Метки нет (Все метки)

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
#include <stdio.h>
 
void flip(int *data, int m, int n) 
{
    int swap, i;
 
    for (i = m; i < --n; i++)
    {
        swap = data[i];
        data[i] = data[n];
        data[n] = swap;
    }
 
}
int main()
{
    int i, j, a, max, moves = 0, length, data[100];
 
    printf("Input length: ");
    scanf_s("%d", &length);
    printf("Input numbers:\n");
 
    if (length < 2) 
        return 0;
 
    for (j = 0; j < length; j++) 
    {
        scanf_s("%d", &data[j]);
    }
 
    for (i = length; i > 1; i--) 
    {
        max = 0;
        for (a = 0; a < i; a++)   
        {
            if (data[a] > data[max])
                max = a;
        }
 
        if (max == (i - 1)) 
            continue;
 
 
        if (max >= 0) 
        {
            flip(data, max, i);
            moves++;
        }
 
    }
 
    for (j = 0; j < length; j++)
    {
        printf("%d ", data[j]);
    }
    printf("\nFlip: %d ", moves);
    scanf_s("%d", &length); 
    return moves;
}
прочитал в хабрахаб об блинной сортировке, попробовал написать
показал преподу говорит неправильно, ибо есть действия нарушаюшую условия сортировки (вроде нельзя замену переменных, как в пузырьке)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2016, 11:59
Ответы с готовыми решениями:

Блинная сортировка (не могу найти ошибку в коде)
#include &lt;stdio.h&gt; void flip(int *data, int m, int n) { int swap, i; for (i = m; i &lt; --n;...

Блинная сортировка массива, не сортируется последний элемент
Товарищи офицеры. Прошу посмотреть мой код блинной сортировки для одномерного массива. Дело в том...

Проверьте, пожалуйста, код программы и исправьте, если нужно
Рассматривая байт как набор логических значений x7 x6 x5 x4 x3 x1 x0 (true -1, false - 0),...

Если число является степенью числа 3, то вывести True, если нет, то False
Дано целое число N (&gt; 0). Если оно есть степенью числа 3, то вывести TRUE, если нет, то False...

4
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
08.06.2016, 17:37 2
Посмотрите как реализована сортировка Вики. Возможно, препод имел ввиду, что вы переворачиваете "блины" вытаскивая их из середины, а нужно брать стопку сверху (в flip() цикл должен начинаться с 0).
0
0 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 12
09.06.2016, 02:04  [ТС] 3
можете написать код ? я не могу читать C#
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
09.06.2016, 03:49 4
Лучший ответ Сообщение было отмечено Piratz как решение

Решение

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
#define MAXLEN  100
void pancake_sort(int *arr, int size) 
{
    for (int i = size - 1; i >= 0; --i)
    {
        int pos = i;
        // Find position of max number between beginning and i
        for (int j = 0; j < i - 1; j++)
        {
            if (arr[j] > arr[pos])
            {
                pos = j;
            }
        }
 
        // is it in the correct position already? 
        if (pos == i)
        {
            continue;
        }
 
        // is it at the beginning of the array? If not flip array section so it is
        if (pos != 0)
        {
            flip(arr, pos + 1);
        }
 
        // Flip array section to get max number to correct position    
        flip(arr, i + 1);
    }
}
 
void flip(int *arr, int n)
{
    printf("n: %d\n", n);
    for (int i = 0; i < n; i++)
    {
        --n;
        int tmp = arr[i];
        arr[i] = arr[n];
        arr[n] = tmp;
    }
}
int main(void)
{
    int i, j, a, max, moves = 0, length, data[MAXLEN];
 
    printf("Input length: ");
    scanf("%d", &length);
    printf("Input numbers:\n");
  
    for (j = 0; j < length; j++) 
    {
        scanf("%d", &data[j]);
    }
 
    pancake_sort(data, length);
 
    for (j = 0; j < length; j++)
    {
        printf("%d ", data[j]);
    }
 
    free(data);
    return 0;
}
1
0 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 12
09.06.2016, 15:26  [ТС] 5
спасибо спрошу у препода, если он скажет не то, то я сдаюсь (кстати функция flip не работает, так как написана после pancake_sort, поставил после него заработало)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2016, 15:26
Помогаю со студенческими работами здесь

Если заданное число является отрицательным, то возвести его в квадрат, если нет, то поделить на два
Вроде бы понимаю как, но никак не могу решить. Условие задачи Если а отрицательное число, то...

Дано целое число N>0, если оно является степенью числа 3 то вывести TRUE, если нет - FALSE
Дано целое число N&gt;0, если оно является степенью числа 3 то вывести TRUE, если нет - FALSE

Определить является ли заданное число трёхзначным, если нет, вывести его последнюю цифру, а если да, первую
Помогите пожалуйста, срочно. Нужно определить является ли число трёхзначным, если нет, вывести его...

Этот код, таймер или нет?
namespace Un4seen.Bass.Misc { using System; using System.ComponentModel; using...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru