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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
khaleesi
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 12
#1

Пузырьковая сортировка - исправить код - C++

17.07.2014, 14:56. Просмотров 315. Ответов 6
Метки нет (Все метки)

У меня есть массив
C++
1
unsigned char *buffer = new unsigned char[length * width]
. И мне нужно реализовать пузырьковую сортировку (сравниваются значения функции).

C++
1
2
3
4
5
6
7
8
9
10
unsigned char *tmp = new unsigned char[chromosomeSize];
for (int i = 0; i < length; i++) {
    for (int j = 0; j < length - i - 1; j++) {
        if (function(buffer, width, j) < function(buffer, width, j+1)) {
            std::copy(buffer, buffer + j*width, stdext::checked_array_iterator<unsigned char*>(tmp, j*width)); 
                        std::copy(buffer + j*width, buffer + (j + 1)*width, stdext::checked_array_iterator<unsigned char*>(buffer + j*width, (j + 1)*width)); //и тут проблема: мне нужно указать заполняемый массив (т.е. часть массива от buffer[0] до buffer[j*width] - как её выделить, чтобы передать в функцию copy?) а я вроде как указала buffer[j*width], хотя компилятор не ругался.
                     std::copy(tmp, tmp + width, stdext::checked_array_iterator<unsigned char*>(buffer + (j + 1)*width, width));// ну и здесь тоже самое с buffer[(j+1)*width]
 
            }
        }
Как мне выделить кусок (часть) массива, чтобы строки корректно отсортировались? Программа у меня работает, но неправильно. Боюсь, что непонятно объяснила, поэтому жду советов и вопросов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2014, 14:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пузырьковая сортировка - исправить код (C++):

Пузырьковая сортировка, разобрать код - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include &lt;iostream&gt; void main() { setlocale...

Сортировка (исправить код) - C++
Помогите с сортировкой! Нужно сортировать исходные данные по убыванию!! Простой массив сортировать могу, а тут никак не получается)...

Сортировка (исправить код) - C++
Нужно упорядочить записи по алфавиту, но у меня только меняет местами name! Помогите исправить код! #include &lt;iostream&gt; #include...

Сортировка пузырьком. Исправить код - C++
Подскажите пжл. в чем ошибка, что не так написано, не хочет сортировать(( числа рандомно присваивает и на этом собственно все(( ...

Сортировка по алфавиту (исправить код) - C++
Помогите отсортировать структуру по алфавиту (сортировка по tabl.name)! У меня ошибку выдает (( #include &lt;iostream&gt; #include &lt;string.h&gt;...

сортировка массива (исправить код) - C++
Нужно отсортировать массив по убыванию bals, но даже не компилируется! #include &lt;iostream&gt; #include &lt;iomanip.h&gt; using namespace...

6
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
17.07.2014, 22:05 #2
Цитата Сообщение от khaleesi Посмотреть сообщение
Как мне выделить кусок (часть) массива, чтобы строки корректно отсортировались?
Укажте интервал в цикле, индекс элемента начала куска и индекс элемента конца куска.
0
khaleesi
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 12
18.07.2014, 10:50  [ТС] #3
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Укажте интервал в цикле, индекс элемента начала куска и индекс элемента конца куска.
А Вы не могли бы привести пример, а то мне не очень понятно? Какой бы цикл я не изменяла или добавляла, моя проблема не исчезает.

Добавлено через 2 часа 56 минут
Чтобы было понятнее: function сопоставляет какое-то число строке. Конечно, я могла бы воспользоваться ещё одним циклом для заполнения массива и всё бы получилось, но зачем лишние операции, поскольку столбцы у меня должны оставаться на своих местах? Мне нужно именно переставить соответственно значению функции строку, т.е. скопировать строку и поставить на нужное место, а не каждый её столбец.
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
18.07.2014, 14:21 #4
khaleesi, да, не очень понятно...
Покажите лучше пример результата операций, до сравнения и после перестановки.
0
khaleesi
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 12
18.07.2014, 15:12  [ТС] #5
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Покажите лучше пример результата операций, до сравнения и после перестановки.
Исходный массив Значение функции

010111110010011111100110 21
111010000111110110111001 21
001011011010000000100011 18
110011101010100111110011 24
011010101101001011110000 23
010100001110000110000110 23
010010101111101101001010 18
000011010110011101001101 22
110001110010000111011101 27
110010110110111111001001 22
110100101100010101010001 22
011110100011110010110000 19
010111101010010000100001 23
110101010011001110001101 22
001101010100010010101110 21
001100010011101100010111 22
111111111001111000100000 20
111110110110010100011010 18
011000011001110101010101 25
110001110100100001111100 20
000001110100100001111100 20
001101010100010101010001 20
110001110100100001111100 20
000011010110011101010000 21
110001110100100001111100 20
010100001110000100011010 19
111101110100100001111100 20
011010101100100111110011 21
110011101010101101001101 22
110011101000100001111100 26

Массив после сортировки: (тут вообще что-то непонятное, хотя понимаю, что напортачила, но никак сообразить не могу)

010111110010011111100110
111010000111110110111001
010111110010011111100110
110011101010100111110011
010111110010011111100110
010100001110000110000110
010111110010011111100110
000011010110011101001101
110001110010000111011101
010111110010011111100110
110100101100010101010001
010111110010011111100110
010111101010010000100001
010111110010011111100110
001101010100010010101110
001100010011101100010111
010111110010011111100110
010111110010011111100110
011000011001110101010101
010111110010011111100110
010111110010011111100110
010111110010011111100110
010111110010011111100110
000011010110011101010000
010111110010011111100110
010111110010011111100110
010111110010011111100110
011010101100100111110011
110011101010101101001101
110011101000100001111100

Добавлено через 16 минут
В общем, ладно, не советую в этом разбираться, потому что таким образом это невозможно, так что буду пыхтеть сама. Спасибо за отзыв)
0
Psilon
Master of Orion
Эксперт .NET
5908 / 4805 / 634
Регистрация: 10.07.2011
Сообщений: 14,407
Записей в блоге: 5
Завершенные тесты: 4
18.07.2014, 15:20 #6
khaleesi, представьте двумерный массив и сортируйте как массив массивов. Для этого даже можно использовать стандартный std::sort, только векторы использовать надо будет
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
18.07.2014, 16:44 #7
khaleesi, как я понял есть проблема во вложенном цикле:
C++
1
2
3
4
5
for (int i = 0; i < length; i++) {
    for (int j = i * width; j < i * width + width - 1; j++) { // Проход каждой строки
            //
        }
    }
Дальше не могу помочь, так как не знаю работу функции.
Ну и Psilon прав, можно использовать двумерный массив.
0
18.07.2014, 16:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2014, 16:44
Привет! Вот еще темы с ответами:

пузырьковая сортировка - C++
Пожалуйста помогите написать программу, которая выполняет сортировку исходного целочисленного массива по возрастанию и убыванию. Исходные...

Пузырьковая сортировка - C++
Написал программу сортировки методом пузырька: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;cstdlib&gt; int...

Пузырьковая сортировка - C++
Здравствуйте! Необходимо осуществить пузырьковую сортировку в столбцах двумерного массива. Но только сортировка должна быть среди...

Пузырьковая сортировка - C++
Помогите исправить не сортирует массив.Еще должен считать кол-во шагов прохода цикла. #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...


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

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

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