Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2012, 11:24   #1
Loreena.J
Пользователь
 
Аватар для Loreena.J
 
Регистрация: 08.10.2012
Сообщений: 11
Сообщение Сортировка массива методом "пузырька"

Доброго времени суток!
Друзья, я очень рассчитываю на вашу помощь. Нужно написать программу, которая будет сортировать массив методом пузырька. Я написал это:
Код:
#include <stdio.h>
const N = 10;
int main(void)
{
int i, j, A[N], c;
// ввод массива A
for ( i = 0; i < N-1; i ++ )
  for ( j = N-2; j >= i; j -- )
      if ( A[j] > A[j+1] )
        {
        c = A[j]; A[j] = A[j+1];
        A[j+1] = c;
        }
printf("\n Отсортированный массив:\n”);
for ( i = 0; i < N; i ++ )
printf("%d ", A[i]);
}
Но программа почему-то не работает. Я не понимаю в чем дело. Это моя первая программа на Си, поэтому не судите строго
Loreena.J вне форума Ответить с цитированием
Старый 11.10.2012, 11:55   #2
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
По умолчанию

Цитата:
Сообщение от Loreena.J Посмотреть сообщение
Код:
#include <stdio.h>
const N = 10;
int main(void)
{
int i, j, A[N], c;
// ввод массива A
for ( i = 0; i < N-1; i ++ )
  for ( j = N-2; j >= i; j -- )
      if ( A[j] > A[j+1] )
        {
        c = A[j]; A[j] = A[j+1];
        A[j+1] = c;
        }
printf("\n Отсортированный массив:\n”);
for ( i = 0; i < N; i ++ )
printf("%d ", A[i]);
}
Но программа почему-то не работает. Я не понимаю в чем дело. Это моя первая программа на Си, поэтому не судите строго
Давно был метод пузырька, но по-моему нужно писать что-то вроде:
Код:
#include <stdio.h>
const N = 10;
int main(void)
{
int A[N];
//заполнили массив
//теперь его сортируем
for(int i=0; i<N; i++)
{
for(int j=i+1; j<N; j++)
{
if(A[i]>A[j])
{
int c=A[i];
A[i]=A[j];
A[j]=c;
}
}
}
}
Как-то так. Давно метод пузырька не трогал
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Старый 11.10.2012, 13:26   #3
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Не все сишные компиляторы поддерживают const. Приходится #define использовать.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define kiArraySize 10

void Swap (int* piItem1, int* piItem2);
void PrintArray(int iaArray[], int iLenth);
void Bubblesort(int iaArray[], int iLength);

int main() {
    int iaArray[kiArraySize];
    int iIndex;

    // Fill array
    srand (time(NULL));
    for (iIndex = 0; iIndex < kiArraySize; ++ iIndex) {
        iaArray[iIndex] = rand() % 30 + 1985; // iaArray[iIndex] in the range 1985-2014
    }

    // Print array
    PrintArray(iaArray, kiArraySize);

    // Sort array
    Bubblesort(iaArray, kiArraySize);

    // Print array
    PrintArray(iaArray, kiArraySize);

    return 0;
}

void Swap (int* piItem1, int* piItem2) {
    int iTemp = *piItem1;
    *piItem1 = *piItem2;
    *piItem2 = iTemp;
}

void PrintArray(int iaArray[], int iLenth) {
    int iIndex;

    for (iIndex = 0; iIndex < iLenth; ++iIndex) {
        printf("%d ", iaArray[iIndex]);
    }
    printf("\n");
}

void Bubblesort(int iaArray[], int iLength) {
    int iIndex, iEnd;

    for (iEnd = iLength - 1; iEnd > 0; --iEnd) {
        for (iIndex = 0; iIndex < iEnd; ++iIndex) {
            if (iaArray[iIndex] > iaArray[iIndex + 1]) {
                Swap(&iaArray[iIndex], &iaArray[iIndex + 1]);
            }
        }
    }
}
Результат работы программы:


Вы всё равно в скором времени будете изучать С++. Поэтому, вот вам учебный пример отсюда: http://xoax.net/cpp/crs/console/lessons/Lesson20/

Сравните с предыдущем кодом на си.

Код:
#include <iostream>

template <typename PData>
void Swap(PData& xrItem1, PData& xrItem2);

template <typename PData>
void PrintArray(PData xaArray[], int iLenth);

template <typename PData>
void Bubblesort(PData xaArray[], int iLength);

int main() {
    using namespace std;

    // First example
    double daArray[] = {2.5, .7, 9.7, 6.5, 3.4, 1.8};
    PrintArray(daArray, 6);
    Bubblesort(daArray, 6);
    PrintArray(daArray, 6);

    // Second example
    char caArray[] = "xoax.net";
    cout << caArray << endl;
    Bubblesort(caArray, 8);
    cout << caArray << endl;

    return 0;
}

template <typename PData>
void Swap(PData& xrItem1, PData& xrItem2) {
    PData xTemp = xrItem1;
    xrItem1 = xrItem2;
    xrItem2 = xTemp;
}

template <typename PData>
void PrintArray(PData xaArray[], int iLenth) {
    using namespace std;
    for (int iIndex = 0; iIndex < iLenth; ++ iIndex) {
        cout << xaArray[iIndex] << " ";
    }
    cout << endl;
}

template <typename PData>
void Bubblesort(PData xaArray[], int iLength) {
    for (int iEnd = iLength - 1; iEnd > 0; --iEnd) {
        for (int iIndex = 0; iIndex < iEnd; ++iIndex) {
            if (xaArray[iIndex] > xaArray[iIndex + 1]) {
                Swap(xaArray[iIndex], xaArray[iIndex + 1]);
            }
        }
    }
}

Последний раз редактировалось 8Observer8; 11.10.2012 в 13:30. Причина: орфография
8Observer8 вне форума Ответить с цитированием
Старый 11.10.2012, 13:53   #4
Loreena.J
Пользователь
 
Аватар для Loreena.J
 
Регистрация: 08.10.2012
Сообщений: 11
По умолчанию

Спасибо Вам большущее!) Мой компилятор действительно не поддерживает const
Loreena.J вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива методом пузырька SashaBogush Помощь студентам 0 11.08.2012 15:08
Сортировка массива методом пузырька bonjovi Паскаль, Turbo Pascal, PascalABC.NET 8 30.01.2012 20:23
VBA. Сортировка массива методом пузырька divine_excuse Помощь студентам 1 29.12.2011 00:05
сортировка методом "пузырька" по возрастанию inquis Помощь студентам 14 05.05.2010 09:50
Сортировка методом линейного выбора и "быстрая" сортировка Карол Помощь студентам 4 27.09.2009 19:52