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

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

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

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

17.07.2014, 14:56. Просмотров 298. Ответов 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]
 
            }
        }
Как мне выделить кусок (часть) массива, чтобы строки корректно отсортировались? Программа у меня работает, но неправильно. Боюсь, что непонятно объяснила, поэтому жду советов и вопросов.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
17.07.2014, 22:05     Пузырьковая сортировка - исправить код #2
Цитата Сообщение от khaleesi Посмотреть сообщение
Как мне выделить кусок (часть) массива, чтобы строки корректно отсортировались?
Укажте интервал в цикле, индекс элемента начала куска и индекс элемента конца куска.
khaleesi
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 12
18.07.2014, 10:50  [ТС]     Пузырьковая сортировка - исправить код #3
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Укажте интервал в цикле, индекс элемента начала куска и индекс элемента конца куска.
А Вы не могли бы привести пример, а то мне не очень понятно? Какой бы цикл я не изменяла или добавляла, моя проблема не исчезает.

Добавлено через 2 часа 56 минут
Чтобы было понятнее: function сопоставляет какое-то число строке. Конечно, я могла бы воспользоваться ещё одним циклом для заполнения массива и всё бы получилось, но зачем лишние операции, поскольку столбцы у меня должны оставаться на своих местах? Мне нужно именно переставить соответственно значению функции строку, т.е. скопировать строку и поставить на нужное место, а не каждый её столбец.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
18.07.2014, 14:21     Пузырьковая сортировка - исправить код #4
khaleesi, да, не очень понятно...
Покажите лучше пример результата операций, до сравнения и после перестановки.
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 минут
В общем, ладно, не советую в этом разбираться, потому что таким образом это невозможно, так что буду пыхтеть сама. Спасибо за отзыв)
Psilon
Master of Orion
Эксперт .NET
5846 / 4743 / 628
Регистрация: 10.07.2011
Сообщений: 14,278
Записей в блоге: 5
Завершенные тесты: 4
18.07.2014, 15:20     Пузырьковая сортировка - исправить код #6
khaleesi, представьте двумерный массив и сортируйте как массив массивов. Для этого даже можно использовать стандартный std::sort, только векторы использовать надо будет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2014, 16:44     Пузырьковая сортировка - исправить код
Еще ссылки по теме:
C++ Пузырьковая сортировка
Пузырьковая сортировка C++
C++ Пузырьковая сортировка
C++ Пузырьковая сортировка
пузырьковая сортировка C++

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

Или воспользуйтесь поиском по форуму:
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 прав, можно использовать двумерный массив.
Yandex
Объявления
18.07.2014, 16:44     Пузырьковая сортировка - исправить код
Ответ Создать тему
Опции темы

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