Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка массива с помощью указателей, передача в фукцию сортировки адреса arr 
:(
    Опции темы
Dikey
Дата 16.10.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

Репутация: нет
Всего: нет



Цель программы использовать для сортировки массив любого размера,копировать его и в копии делать сортировку.
Подскажите в чем ошибка??компилятор ошибок не находит VS 2008.
Я скорей с указателями напутал,укажите плиз на ошибку.
Код

void swap (int *p1,int *p2);
int a[10]={8,2,6,9,1,4,5,7,8,1},b[10];
int main (){
    for (int i=0;i<10;i++)
        b[i]=a[i];
    sort (b,10);
    for (int i=0;i<10;i++)
        cout<<b[i]<<endl;
    return 0;
}
void sort (int *p,int n){
    int i,j,low;
    for (i=0;i<n-1;i++){
        low=i;
        for (j=i+1;j<n;j++)
            if (*p+j<*p+low)    //мне непонятно как сравнить именно значения массивов а не адреса,
                low=j;                //верно ли я предполагаю что *p+j==b[j],а p+i==&b[i]  ???
    if (low!=i)
        swap(p+i,p+low);
    }
}
void swap (int *p1,int *p2){
    int temp=*p1;
    *p2=*p1;
    *p1=temp;
}


заранее благодарен.

Это сообщение отредактировал(а) Dikey - 16.10.2009, 17:28
PM MAIL WWW ICQ Skype   Вверх
Anikmar
Дата 16.10.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Можно хоть приблизительно ее охарактеризовать?
PM MAIL ICQ   Вверх
ИванМ
Дата 16.10.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Очень странная функция сортировки. Вообще не понятно что вы хотели этим сказать. Поищите в поиске стандартную функцию сортировки пузырьком или еще какую-нибудь.

Добавлено @ 17:29
Цитата(Dikey @  16.10.2009,  17:16 Найти цитируемый пост)
if (*p+j<*p+low)    //мне непонятно как сравнить именно значения массивов а не адреса,                low=j;                //верно ли я предполагаю что *p+j==b[j],а p+i==&b[i]  ???


(p+i)=&b[i] - правильно
первое надо так:
*(p+j)=b[j]


Это сообщение отредактировал(а) ИванМ - 16.10.2009, 17:30
PM MAIL   Вверх
Dikey
Дата 16.10.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

Репутация: нет
Всего: нет



Нужна именно этот способ сортировки.
Главное для меня фукция sort и swap,нужно чтоб фукция sort принимала разные массивы с разной размерностью и сортировала их.
тоесть я могу использовать функцию в программе несколько раз с разными массивами,допустим мне нужно отсортировать три массива по очереди,я передаю в функцию начальный адрес масива и его размерность.


Это сообщение отредактировал(а) Dikey - 16.10.2009, 17:34
PM MAIL WWW ICQ Skype   Вверх
ИванМ
Дата 16.10.2009, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Ваш вариант так если подкорректировать указатели:
Код

void sort (int *p,int n){
    int i,j,low;
    for (i=0;i<n-1;i++){
        low=i;
        for (j=i+1;j<n;j++)
            if (*(p+j)<*(p+low)) 
                low=j;                
    if (low!=i)
        swap(p+i,p+low);
    }
}


Но только это все равно не будет работать. Метод ошибочный.  Любой стандартный метод с вашей задачей прекрасно справится.

PM MAIL   Вверх
Dikey
Дата 16.10.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

Репутация: нет
Всего: нет



пробовал,сортирует не верно,но радует и это,а то вообще ничего не происходило.
нужно отсортировать
8,2,6,9,1,4,5,7,8,1
выдает
8,2,6,9,8,9,8,8,8,9

Метод работоспособный,проверенный мной и заключается в следующем:
1. предположить что элемент массива low является наименьшим(на первом шаге это 0 элемент массива)
2. вложенный цикл обеспечивает перебор всех элементов массива вправо от сравниваемого j=i+1
3. в условии вложенного цикла сравниваются все элементы массива,если находится меньшее значение элемента чем low
то тогда этот элемент и становится low   в программе low=j
4. Условием (i!=low) не сортируем повторяющиеся элементы.
В функции swap думаю все понятно.


Это сообщение отредактировал(а) Dikey - 16.10.2009, 17:57
PM MAIL WWW ICQ Skype   Вверх
ИванМ
Дата 16.10.2009, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Dikey, ваш метод рабочий, так что прошу прощения. Ошибка была в функции swap. Надо так:
Код

void swap (int *p1,int *p2){
    int temp=*p1;
    *p1=*p2;
    *p2=temp;
}

функцию sort тоже измените как я сказал.

Это сообщение отредактировал(а) ИванМ - 16.10.2009, 18:03
PM MAIL   Вверх
Dikey
Дата 16.10.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

Репутация: нет
Всего: нет



Огромное спасибо,ошибка как всегда глупая.
PM MAIL WWW ICQ Skype   Вверх
Anikmar
Дата 17.10.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Dikey @  16.10.2009,  18:05 Найти цитируемый пост)
ошибка как всегда глупая. 

А бывают "умные" ошибки?  smile 
PM MAIL ICQ   Вверх
Dikey
Дата 17.10.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 6.3.2008
Где: Украина г.Изюм

Репутация: нет
Всего: нет



Этот способ сортировки похож на пузырек?
мне кажется что он медленнее чем пузырек.

Код


int choise (int n){
        for (i=0;i<9;i++){
            if (q[i]>q[i+1])
             sort(&q[i],&q[i+1]);
    }
        if (n==0)
            return 0;
    return choise (n-1);
}

void sort(int *p1,int *p2){
    int temp=*p1;
        *p1=*p2;
        *p2=temp;
}

PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.