Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Сортировка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Список через массив http://www.cyberforum.ru/cpp-beginners/thread360227.html
мне не интересуют исходники меня интересуют два вопроса 1)массив должен быть постоянного размера?(ну то есть в конструктор передал n - таким и будет) 2)в задании написано Класс АТД реализовать как...
C++ Цвет текста Вообщем мне надо чтобы было как на примере цветной текст как это сделать? http://www.cyberforum.ru/cpp-beginners/thread360207.html
C++ Как выполнить данную задачу на с++ ?
Вычислить координаты точек пересечения кривых, заданных уравнениями y=(x+c) и ((pow((x/2),2))+(pow(y,2)))=1. Проверить результаты подстановкой в исходные уравнения.
Создание файла конфигураций. Работа с файлом. [C++] C++
Всем привет. Хочу создать функцию, который будет возвращать нужную строку из файла. Файл test.conf ZONE = 1 IP = 127.0.0.1 PORT = 8085
C++ Помогите написать программу. Символы и строки http://www.cyberforum.ru/cpp-beginners/thread360194.html
Очень большая просьба! Кто может - помогите пожалуйста написать программу! К сожалению, в С++ совсем не соображаю. Такую программу задали написать:((( Составить функцию, выводящую на экран слова,...
C++ Поднесение к степени Как быстро поднести действительное число в натуральный степень X^n, меньше чем за n шагов? подробнее

Показать сообщение отдельно
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
07.10.2011, 22:07
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
void Exchange(double *a, const int n, const int index)
{
    int i = 0, j = n - 1, buf;
    while (i < j)
    {
        while (i < j && a[i] < a[index])
            i++;
        while (i < j && a[j] >= a[index])
            j--;
        if (i < j) 
        {
            buf = a[i];
            a[i] = a[j];
            a[j] = buf;
            i++;
            j--;
        }
    }
}
 
int main()
{
   double a[9] = {5, 4, 3, 2, 1, 10, 9, 8, 7};
   int i;
   Exchange(a, 9, 1);
   for(i = 0; i < 9; i++)
      printf("%.0f ", a[i]);
   getchar();
}
Выводит:
1 2 3 4 5 10 9 8 7

Добавлено через 2 минуты
Цитата Сообщение от xexew Посмотреть сообщение
Вы читайте внимательней, я же написал, что он выводит тот же массив, а вы обратили внимание на неправильно написанную мысль.
А вы проверяйте внимательнее, выводит нужный массив. Только баламутите тут...

Добавлено через 6 минут
Но я бы немного функцию переделал вот так, так надежнее:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Exchange(double *a, const int n, const int index)
{
    int i = 0, j = n - 1, buf;
    double x = a[index];
    while (i < j)
    {
        while (i < j && a[i] < x)
            i++;
        while (i < j && a[j] >= x)
            j--;
        if (i < j)
        {
            buf = a[i];
            a[i] = a[j];
            a[j] = buf;
            i++;
            j--;
        }
    }
}
Повторю, что она одну часть задачи решает, ее чуточку доделать надо, чтобы большие и равные элементы в правой части не вперемешку были, но это уже банально просто, думаю, что сами это в состоянии, но если, что, помогу.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru