Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
sergei60
47 / 28 / 11
Регистрация: 10.06.2012
Сообщений: 374
#1

Ошибка в сортировке массива - C++

12.08.2015, 08:09. Просмотров 228. Ответов 2
Метки нет (Все метки)

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
#include <cmath>
#include <iostream>
using namespace std;
void sort(int n);
void swap(int *p1,int *p2);
int a[7];
    int main(){
        int i;
        for(i=0; i<7; i++){
            cout<<"введите "<< i << " элемент массива :";
            cin>>a[i];
        }
        sort(7);
        cout<<"Здесь все элементы отсортированного массива :"
        <<endl;
        for(i=0; i<7; i++)
        cout <<a[i]<<" ";
        return 0;
    }
    //функция сортировки  массива: сортирует массив а,
    //состоящий из n элементов.
    void sort (int n){
        int i,j,high;
        for (i= 0; i<n+1; i++){
            //в этой части цикла производится поиск
            //наибольшего элемента в диапазоне от i до n-1
            //индекс найденного элемента присваивается
            //переменной high
            high=i;
            for (j=n; j>i+1;j--)
            if (a[j]>a[high])
            high=j;
            //в этой части цикла выполняется перестановка,
            //если это необходимо.
            if (i !=high)
            swap(&a[i],&a[high]);
        }
    }
    //функция перестановки.
    //меняет местами значения,на которые указывают 
    //переменные  p1 и p2.
    void swap (int *p1,int *p2){
        int temp=*p1;
        *p1=*p2;
        *p2 =temp;
    }
Не работает сортировка массива . Вот вывод :введите 0 элемент массива :9
введите 1 элемент массива :9
введите 2 элемент массива :9
введите 3 элемент массива :9
введите 4 элемент массива :6
введите 5 элемент массива :5
введите 6 элемент массива :4333
Здесь все элементы отсортированного массива :
4333 9 9 9 9 5 6
Причем не работает именно при таком вводе элементов массива.

Добавлено через 17 минут
Я думал ,что эта ошибка из за разрядности вводимых элементов ,но нет . Вот вывод с одноразрядными числамивведите 0 элемент массива :4
введите 1 элемент массива :1
введите 2 элемент массива :9
введите 3 элемент массива :8
введите 4 элемент массива :7
введите 5 элемент массива :5
введите 6 элемент массива :6
Здесь все элементы отсортированного массива :
9 8 7 6 4 5 1
http://www.cyberforum.ru/cpp-beginners/thread1882586.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2015, 08:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка в сортировке массива (C++):

Ошибка в сортировке массива
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;time.h&gt; using namespace...

Ошибка в сортировке массива по убыванию
Подскажите в чем ошибка, сортирую массив по убыванию #include &lt;iostream&gt;...

Ошибка в сортировке\выводе массива
Помогите исправить ошибку в программе. Задание: В квадратной матрице 3х3...

Обработка двумерного массива(ошибка в сортировке)
Ребят 2 вопроса, но самый главный заключается в сортировке.Подскажите...

Ошибка при сортировке двумерного массива по возрастанию
По убыванию сортировка работает полноценно,а по возрастанию первое число НЕ...

2
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
12.08.2015, 08:18 #2
sergei60, вижу выход за пределы массива. Массив из 7 элементов, т.е. индексы должны лежать в диапазоне [0..6]. Однако при вызове sort(7) видно, что i,j могут достигать значения 7. По алгоритмам сортировки рекомендую посмотреть тут.
0
_Scorpius_
54 / 54 / 35
Регистрация: 01.04.2015
Сообщений: 109
12.08.2015, 08:28 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    void sort (int n){
        int i,j,high;
        for (i=0; i<n-1; i++){
            //в этой части цикла производится поиск
            //наибольшего элемента в диапазоне от i до n-1
            //индекс найденного элемента присваивается
            //переменной high
            high=i;
            for (j=n-1; j>i;j--)
            if (a[j]>a[high])
            high=j;
            //в этой части цикла выполняется перестановка,
            //если это необходимо.
            if (i !=high)
            swap(&a[i],&a[high]);
        }
    }
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2015, 08:28
Привет! Вот еще темы с решениями:

Ошибка в сортировке элементов массива через указатели
Доброго времени суток! Ради интереса играюсь с указателями. Ниже код и он не...

Ошибка в сортировке
Часть программы я сделал, но сортировка массива выходит кривой, та строка,...

Ошибка в сортировке
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;algorithm&gt; int const N =...

Ошибка в сортировке
#include &lt;iostream&gt; using namespace std; int main() { int A, c; for (int...


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

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

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