Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Брайт
2 / 2 / 1
Регистрация: 08.03.2017
Сообщений: 10
1

Странность

08.04.2017, 20:52. Просмотров 812. Ответов 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
#include <stdio.h>
 
void quicksort(int *arr, int b, int e)
{
    int l = b, r = e;
    int ipiv = (l + r)/2;
    int piv = arr[(l + r)/2];
 
    int temp;
    while (l <= r) {
        while (arr[l] < piv)
            l++;
        while (arr[r] > piv)
            r--;
 
        if (l <= r) {
            temp = arr[l];
            arr[l++] = arr[r];
            arr[r--] = temp;
        }
    }
 
    if (b < r) quicksort(arr, b, r);
    if (e > l) quicksort(arr, l, e);
}
 
void output(int *a)
{
    int i;
    for (i = 0; i < 10; i++)
        printf("%d ", a[i]);
    printf("\n");
}
 
int main(void)
{
    int a[10] = {4, 7, 4, 1, 10, 5, 6, 6, 0, 0};
 
    output(a);
    quicksort(a, 0, 9);
    output(a);
 
    return 0;
}
При замене правой части у неравенств в строчках 11 и 13 на arr[ipiv], выдаёт неверный результат.
Почему? Ведь по идее замена эквивалентная...
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2017, 20:52
Ответы с готовыми решениями:

странность feof()
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; void main(void) { FILE *f1, *f2;...

Странность
Вобщем, дело такое, есть жесткий диск в ноутбуке, рабочий, сейчас используется, его история очень...

Странность.
Здравствуйте! Заметил большую странность. Создал сайт protalk.ru. Посещаемость колеблется....

Странность с массивами
Скажите, почему при выполнении этого кода: var a,b:array of integer; begin for var i:=0 to 10 do...

странность в коде
Доброго времени суток :) на странице есть div &lt;div id=&quot;obl&quot;&gt; &lt;/div&gt; после неё я написал...

4
sidor_01
80 / 80 / 72
Регистрация: 25.02.2017
Сообщений: 175
08.04.2017, 21:31 2
Цитата Сообщение от Брайт Посмотреть сообщение
При замене правой части у неравенств в строчках 11 и 13 на arr[ipiv], выдаёт неверный результат.
У меня в обоих случаях результат один и тот же
0
Брайт
2 / 2 / 1
Регистрация: 08.03.2017
Сообщений: 10
08.04.2017, 23:10  [ТС] 3
Компилятор: GNU GCC Compiler
0
Миниатюры
Странность   Странность  
sidor_01
80 / 80 / 72
Регистрация: 25.02.2017
Сообщений: 175
09.04.2017, 00:05 4
Лучший ответ Сообщение было отмечено Брайт как решение

Решение

Брайт, прошу извинить. У меня такой же результат как и у Вас. Не доглядел

Добавлено через 22 минуты
Цитата Сообщение от Брайт Посмотреть сообщение
Почему? Ведь по идее замена эквивалентная...
Замена не эквивалентная. Переменная piv в цикле while (l <= r) { не изменяется. А вот arr[ipiv] может измениться в конструкции :
C
1
2
3
4
5
if (l <= r) {
            temp = arr[l];
            arr[l++] = arr[r];
            arr[r--] = temp;
        }
Добавлено через 18 минут
Для наглядности можете запустить код

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
#include <stdio.h>
void output(int *a); 
int qw=1;
void quicksort(int *arr, int b, int e)
{
    int l = b, r = e;
    int ipiv = (l + r)/2;
    int piv = arr[(l + r)/2];
 
    int temp;
    printf("Call function quicksort number %d\n",qw);
    printf("Value of arr[ipiv] inside loop while (l <= r) after each itaration\n\n");
    while (l <= r) {
        while (arr[l] < arr[ipiv])//piv)
            l++;
        while (arr[r] >arr[ipiv]) //piv)
            r--;
 
        if (l <= r) {
            temp = arr[l];
            arr[l++] = arr[r];
            arr[r--] = temp;
        }
        
        printf("arr[ipiv]=%d\n",arr[ipiv]);
    }
    
    
    if (b < r){ ++qw;
     quicksort(arr, b, r);}
    
    if (e > l){ ++qw;
     quicksort(arr, l, e); }
}
 
void output(int *a)
{
    int i;
    for (i = 0; i < 10; i++)
        printf("%d ", a[i]);
    printf("\n");
}
 
int main(void)
{
    int a[10] = {4, 7, 4, 1, 10, 5, 6, 6, 0, 0};
 
    //output(a);
    
    quicksort(a, 0, 9);
    //output(a);
 
    return 0;
}
1
Брайт
2 / 2 / 1
Регистрация: 08.03.2017
Сообщений: 10
09.04.2017, 00:06  [ТС] 5
Точно!
Спасибо за помощь!

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
09.04.2017, 00:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2017, 00:06

Странность С++ и SDL
Здравствуйте уважаемые форумчане возникла непонятная ситуация вообщем писал на С++ классы и учил...

Странность с кодировками в ff
Доброго времени суток. Есть html документ который нормально отображается браузерами commodo dragon...

Странность с JLabel
Есть код: JLabel 1 = new JLabel(&quot;1&quot;); frame.add(1); ...


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

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

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