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

Сортировка одномерного массива - C++

Восстановить пароль Регистрация
 
Lena86
0 / 0 / 0
Регистрация: 22.08.2014
Сообщений: 80
05.09.2014, 23:16     Сортировка одномерного массива #1
задание
отсортировать элементы массива, находящиеся слева от найденной позиции по убыванию, а элементы массива, находящиеся справа от найденной позиции по возрастанию.
найденная позиция у меня - digit_element

что не так???
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
int temp=0;
      bool exit=false;
      while(!exit)
      {
          exit=true;
          for(int i=0;i<digit_index-1;i++)
          {
              if(arro[i]<arro[i+1])
              {
                  temp=arro[i];
                  arro[i]=arro[i+1];
                  arro[i+1]=temp;
                  exit=false;
              }
          }
      }
 
      int temp_1=0;
      while(!exit)
      {
          exit=true;
          for(int i=digit_index+1;i<size_2;i++)
          {
              if(arro[i]>arro[i+1])
              {
                  temp_1=arro[i];
                  arro[i]=arro[i+1];
                  arro[i+1]=temp_1;
                  exit=false;
              }
          }
      }
     for(int i=0;i<size_2;i++)
     {
       cout<<arro[i]<<" ";
     }  
       cout<<"\n"<<endl;
Добавлено через 34 секунды
не работает вторая часть

Добавлено через 31 секунду
т.е. до найденного элемента сортирует, после - нет

Добавлено через 1 минуту
может, первую и вторую часть можно объединить как-то?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2014, 23:16     Сортировка одномерного массива
Посмотрите здесь:

C++ Сортировка одномерного массива
Сортировка одномерного массива C++
сортировка одномерного массива C++
Сортировка одномерного массива C++
C++ Сортировка одномерного массива С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
06.09.2014, 00:04     Сортировка одномерного массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
for(int i = 0; i < SIZE; i++)
{
    if(i < digit_element)
        for(int j = 0; j < digit_element - 1; j++)
            if(arr[j] < arr[j + 1])
                std::swap(arr[j], arr[j + 1]);
    if(i > digit_element)
        for(int j = digit_element + 1; j < SIZE - 1; j++)
            if(arr[j] > arr[j + 1])
                std::swap(arr[j], arr[j + 1]);
}
-=ЮрА=-
Заблокирован
Автор FAQ
06.09.2014, 00:09     Сортировка одномерного массива #3
Цитата Сообщение от Lena86 Посмотреть сообщение
может, первую и вторую часть можно объединить как-то?
- конечно, это один и тот же алгоритм сортировки
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
#include <iostream>
using namespace std;
 
void arr_show(int * arr, int size);
void arr_sort(int * arr, int pos, int count, bool bascend = true);
 
int main(){
    int arr[] = {5, -3, 14, 44, -2, 11, 1, 3, 5, 17, 46};
    int size  = sizeof(arr) / sizeof(arr[0]);
    int pos   = 3;
    cout<<"\n\tINIT : "<<endl;
    arr_show(arr, size);
    arr_sort(arr, 0, pos, true);
    arr_sort(arr, pos, size - pos, false);
    cout<<"\n\tSORT : "<<endl;
    arr_show(arr, size);
    return 0;
}
void arr_show(int * arr, int size){
    for( int i = 0; i < size; i++ )
        cout<<arr[i]<<" ";
}
void arr_sort(int * arr, int pos, int count, bool bascend){
    int i, j, buf;
    for( i = pos; i < pos + count; i++ )
    for( j = pos; j < pos + count; j++ )
    {
        if( bascend ? (arr[i] > arr[j]) : (arr[i] < arr[j]) )
        {
            buf = arr[i];
            arr[i] = arr[j];
            arr[j] = buf;
        }
    }
}
http://codepad.org/HClW544e
INIT :
5 -3 14 44 -2 11 1 3 5 17 46
SORT :
14 5 -3 -2 1 3 5 11 17 44 46
Lena86
0 / 0 / 0
Регистрация: 22.08.2014
Сообщений: 80
06.09.2014, 00:58  [ТС]     Сортировка одномерного массива #4
=ЮрА=-, я так поняла, что в твоем примере идет сортировка на выбор ( или возрастание или убывание), а мне надо в одну часть массива отсортировать по убыванию, а вторую по возрастанию...
-=ЮрА=-
Заблокирован
Автор FAQ
06.09.2014, 10:40     Сортировка одномерного массива #5
Lena86,
Цитата Сообщение от Lena86 Посмотреть сообщение
а мне надо в одну часть массива отсортировать по убыванию, а вторую по возрастанию...
- ну в чём проблема переставить индексы?Хорошо вот решение для слева по убыванию а справа по возрастанию
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
#include <iostream>
using namespace std;
 
void arr_show(int * arr, int size);
void arr_sort(int * arr, int pos, int count, bool bascend = true);
 
int main(){
    int arr[] = {5, -3, 14, 44, -2, 11, 1, 3, 5, 17, 46};
    int size  = sizeof(arr) / sizeof(arr[0]);
    int pos   = 3;
    cout<<"\n\tINIT : "<<endl;
    arr_show(arr, size);
    arr_sort(arr, 0, pos, false);
    arr_sort(arr, pos + 1, size - pos - 1, true);
    cout<<"\n\tSORT : "<<endl;
    arr_show(arr, size);
    return 0;
}
void arr_show(int * arr, int size){
    for( int i = 0; i < size; i++ )
        cout<<arr[i]<<" ";
}
void arr_sort(int * arr, int pos, int count, bool bascend){
    int i, j, buf;
    for( i = pos; i < pos + count; i++ )
    for( j = pos; j < pos + count; j++ )
    {
        if( bascend ? (arr[i] > arr[j]) : (arr[i] < arr[j]) )
        {
            buf = arr[i];
            arr[i] = arr[j];
            arr[j] = buf;
        }
    }
}
int pos = 3;
INIT :
5 -3 14 44 -2 11 1 3 5 17 46
SORT :
-3 5 14 44 46 17 11 5 3 1 -2
http://codepad.org/OAts1UzD

Не по теме:

Добавлю что функция

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
void arr_sort(int * arr, int pos, int count, bool bascend = true);
в зависимости от индекса может сортировать как весь так и часть массива, флаг регулирует вид сортировки : ИСТИНА - возрастание ЛОЖЬ - убывание

Yandex
Объявления
06.09.2014, 10:40     Сортировка одномерного массива
Ответ Создать тему
Опции темы

Текущее время: 14:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru