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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
utwo
3 / 3 / 0
Регистрация: 10.10.2009
Сообщений: 108
#1

Метод сортировки выбором -2 - C++

10.10.2009, 01:39. Просмотров 2724. Ответов 7
Метки нет (Все метки)

Доброе время суток,
Чтоб не засорять чужую тему с чужими задачи, решил создать новую.


Используя сортировку выбором необходимо выбрать мин. элемент в массиве, перенести в вых. массив на очередную позицию. Во вход. массиве все элементы от следующего за текущим до конца сдвинуть на 1 влево.

Насколько я понял это должно выглядеть следующим образом (A-вход.массив, А"-выход.массив):
Код
           A=13,11,8,0,3,      A"=
           A=13,11,8,3,        A"=0
           A=13,11,8,          A"=0,3
           A=13,11,            A"=0,3,8
           A=13,               A"=0,3,8,11
           A=,                 A''=0,3,8,11,13
В соседней теме выложили листинг. Но похоже это не много не мой мой вариант.
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
#include <iostream>
#include <string>
 
using namespace std;
 
 
 
void selectSort(string a[], long size) {
        long i, j, k;
        string x;
 
        for( i=0; i < size; i++) { // i - номер текущего шага
                k=i; x=a[i];
                for( j=i+1; j < size; j++) // цикл выбора наименьшего элемента
                        if ( a[j] < x ) {
                                k=j; x=a[j]; // k - индекс наименьшего элемента
                        }
                        a[k] = a[i]; a[i] = x; // меняем местами наименьший с a[i]
        }
}
 
 
void main()
{ 
        int n, A=10, B=55;
        
 
        cout<<"enter n:"; cin>>n;
        string *s=new string[n];
        for (int i=0; i<n; i++)
        {
                cout<<i+1<<":"; cin>>s[i];
        }
 
        selectSort(s,n);
 
        for (int i=0; i<n; i++)
        {
                cout<<s[i]<<endl;
        }
        cout<<endl; system("pause");
}
Спасибо за любую информацию!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2009, 01:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод сортировки выбором -2 (C++):

Метод сортировки выбором!!! - C++
ВАРИАНТ 21 Написать программу, которая методом сортировки выбором сортирует введенный пользователем массив слов. Также найти количество...

Метод сортировки прямым выбором - C++
Привет всем. Есть код программы которая сортирует по возрастанию методом прямого выбора. При выводе отсортированного массива, она выводит 1...

Метод сортировки выбором счётчик количества итераций C++ - C++
Программа должна сортировать массивы размером 10 и 100 методом выбора и показывать эффиктивность в отношении с теорией. А теория говорит о...

Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя) - C++
Здравствуйте! Дали весьма интересное задание. Сравнить два вышеуказанных метода сортировки для массива из 10000 элементов, результаты...

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

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

7
valeriikozlov
Эксперт С++
4675 / 2501 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
10.10.2009, 07:09 #2
Цитата Сообщение от utwo Посмотреть сообщение
Используя сортировку выбором необходимо выбрать мин. элемент в массиве, перенести в вых. массив на очередную позицию. Во вход. массиве все элементы от следующего за текущим до конца сдвинуть на 1 влево.
Для такого условия код:
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
47
48
49
50
#include<iostream.h>
#include<windows.h>
#include <process.h> 
int *mas1, *mas2, n, i, j, size, min, min_poz;
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Ââåäèòå êîëè÷åñòâî Г·ГЁГ±ГҐГ«"<<endl;
    cin>>n;
    size=n;
    // ñîçäГ*ГҐГ¬ âõîäГ*îé ГЁ âûõîäГ*îé äèГ*Г*ìè÷åñêèå Г¬Г*Г±Г±ГЁГўГ» ГЁ îáГ*óëÿåì ГЁГµ ýëåìåГ*ГІГ»
    mas1= new int[n];
    mas2= new int [n];
    for(i=0; i<n; i++)
        mas1[i]=mas2[i]=0;
    // Г§Г*ïîëГ*ГїГҐГ¬ Г·ГЁГ±Г«Г*ìè âõîäГ*îé Г¬Г*Г±Г±ГЁГў
    cout<<"Ââåäèòå Г·ГЁГ±Г«Г* âõîäГ*îãî Г¬Г*Г±Г±ГЁГўГ*"<<endl;
    for(i=0; i<n; i++)
    {
        cout<<i+1<<" = ";
        cin>>mas1[i];
        cout<<endl;
    }
    // âûáîðî÷Г*Г*Гї ñîðòèðîâêГ*
    j=0;    
    while(n!=1)
    {
        min=mas1[0];
        min_poz=0;
        for(i=0; i<n; i++)
            if(min>mas1[i])
            {
                min=mas1[i];
                min_poz=i;
            }
        mas2[j]=mas1[min_poz];
        j++;
        for(i=min_poz; i<n-1; i++)
            mas1[i]=mas1[i+1];
        n--;
    }
    mas2[j]=mas1[0];
// âûâîä îòñîðòèðîâГ*Г*Г*îãî Г¬Г*Г±Г±ГЁГўГ* Г*Г* ГЅГЄГ°Г*Г*
    cout<<endl<<endl<<"ÎòñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў"<<endl;
    for(i=0; i<size; i++)
        cout<<i+1<<" = "<<mas2[i]<< endl;   
    system("pause");
    return 0;
}
А ввобще-то выборочная сортировка не обязательно проводится с использованием двух массивов (входного и выходного). Обычно она проводится прямо в неотсортированном массиве.
1
utwo
3 / 3 / 0
Регистрация: 10.10.2009
Сообщений: 108
07.11.2009, 11:20  [ТС] #3
Теперь буду усложнять задачку

Задачку нужно выполнить в виде функции, использующую для работы со строкой только указатели и операции вида *р++, Р++ и т.д. Строку, которую возвращает функция необходимо также сделать через указатель.

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

Спасибо!
0
valeriikozlov
Эксперт С++
4675 / 2501 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
07.11.2009, 11:41 #4
utwo, Вам сделать на базе Вашего кода (с использованием двух массивов (входного и выходного)) или более оптимальный вариант (с использованием только одного массива)?
1
utwo
3 / 3 / 0
Регистрация: 10.10.2009
Сообщений: 108
07.11.2009, 11:46  [ТС] #5
Цитата Сообщение от valeriikozlov Посмотреть сообщение
utwo, Вам сделать на базе Вашего кода (с использованием двух массивов (входного и выходного)) или более оптимальный вариант (с использованием только одного массива)?
Два массива необходимо было только для наглядности. В данном случае пытаюсь переделать прежний код, но с одним массивом.
0
valeriikozlov
Эксперт С++
4675 / 2501 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
07.11.2009, 12:07 #6
Два массива необходимо было только для наглядности. В данном случае пытаюсь переделать прежний код, но с одним массивом.
Вот с одним массивом Ваш код:
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
#include<iostream.h>
#include<windows.h>
#include <process.h> 
int *mas1, n, i, j, temp, size, min_poz;
int main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        cout<<"Ââåäèòå êîëè÷åñòâî Г·ГЁГ±ГҐГ«"<<endl;
        cin>>n;
        size=n;
        // ñîçäГ*ГҐГ¬ âõîäГ*îé ГЁ âûõîäГ*îé äèГ*Г*ìè÷åñêèå Г¬Г*Г±Г±ГЁГўГ» ГЁ îáГ*óëÿåì ГЁГµ ýëåìåГ*ГІГ»
        mas1= new int[n];
        // Г§Г*ïîëГ*ГїГҐГ¬ Г·ГЁГ±Г«Г*ìè âõîäГ*îé Г¬Г*Г±Г±ГЁГў
        cout<<"Ââåäèòå Г·ГЁГ±Г«Г* âõîäГ*îãî Г¬Г*Г±Г±ГЁГўГ*"<<endl;
        for(i=0; i<n; i++)
        {
                cout<<i+1<<" = ";
                cin>>mas1[i];
                cout<<endl;
        }
        // âûáîðî÷Г*Г*Гї ñîðòèðîâêГ*
        while(n!=1)
        {
                min_poz=size-n;
                for(i=size-n; i<size; i++)
                    if(mas1[min_poz]>mas1[i])
                       min_poz=i;
                temp=mas1[size-n];
                mas1[size-n]=mas1[min_poz];
                mas1[min_poz]=temp;
                n--;
        }
 // âûâîä îòñîðòèðîâГ*Г*Г*îãî Г¬Г*Г±Г±ГЁГўГ* Г*Г* ГЅГЄГ°Г*Г*
        cout<<endl<<endl<<"ÎòñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў"<<endl;
        for(i=0; i<size; i++)
                cout<<i+1<<" = "<<mas1[i]<< endl;       
        system("pause");
        return 0;
}
Под эти условия нужно переделать?:
Задачку нужно выполнить в виде функции, использующую для работы со строкой только указатели и операции вида *р++, Р++ и т.д. Строку, которую возвращает функция необходимо также сделать через указатель.

Данная функция будет находит мин. элемент массива и возвращает указатель на него. С использованием этой функции реализовать сортировку выбором.
1
utwo
3 / 3 / 0
Регистрация: 10.10.2009
Сообщений: 108
07.11.2009, 19:46  [ТС] #7
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Под эти условия нужно переделать?:
Да, хотя бы направить на путь истинный, в какую сторону копать
0
valeriikozlov
Эксперт С++
4675 / 2501 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
07.11.2009, 20:00 #8
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
#include<iostream.h>
#include<windows.h>
#include <process.h> 
int *mas1, n, i, j, temp, size, min_poz, *pMas;
int main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        cout<<"Ââåäèòå êîëè÷åñòâî Г·ГЁГ±ГҐГ«"<<endl;
        cin>>n;
        size=n;
        // ñîçäГ*ГҐГ¬ âõîäГ*îé ГЁ âûõîäГ*îé äèГ*Г*ìè÷åñêèå Г¬Г*Г±Г±ГЁГўГ» ГЁ îáГ*óëÿåì ГЁГµ ýëåìåГ*ГІГ»
        mas1= new int[n];
        // Г§Г*ïîëГ*ГїГҐГ¬ Г·ГЁГ±Г«Г*ìè âõîäГ*îé Г¬Г*Г±Г±ГЁГў
        cout<<"Ââåäèòå Г·ГЁГ±Г«Г* âõîäГ*îãî Г¬Г*Г±Г±ГЁГўГ*"<<endl;
        pMas=mas1;
        for(i=0; i<n; i++)
        {
                cout<<i+1<<" = ";
                cin>>*(pMas+i);
                cout<<endl;
        }
        // âûáîðî÷Г*Г*Гї ñîðòèðîâêГ*
        while(n!=1)
        {
                min_poz=size-n;
                for(i=size-n; i<size; i++)
                    if(*(pMas+min_poz)>*(pMas+i))
                       min_poz=i;
                                temp=*(pMas+size-n);
                                *(pMas+size-n)=*(pMas+min_poz);
                                *(pMas+min_poz)=temp;
                n--;
        }
 // âûâîä îòñîðòèðîâГ*Г*Г*îãî Г¬Г*Г±Г±ГЁГўГ* Г*Г* ГЅГЄГ°Г*Г*
        cout<<endl<<endl<<"ÎòñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў"<<endl;
        for(i=0; i<size; i++)
                cout<<i+1<<" = "<<*(pMas+i)<< endl;       
        system("pause");
        return 0;
}
1
07.11.2009, 20:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2009, 20:00
Привет! Вот еще темы с ответами:

Примеры реализации сортировки выбором - C++
Дайте плиз пару примеров по (Selection sort) в принципе работы разобрался...(кажется)... щас хотел бы на каком нибудь примере понять. ...

Сравнение алгоритмов сортировки (выбором и пузырьком) - C++
создать программу для сравнения алгоритмов сортировки (Выбором и Пузырьком)т.е. чтоб выдавал время построения массива.Помогите очень...

Функция для сортировки массива выбором - C++
Добрый день всем, на сегодня лабораторная нужна, но не могу понять как реализовать этот код За ранее благодарен кто откликнется!!! ...

Помогите найти ошибку в функции сортировки выбором - C++
Хотел реализовать так чтобы в функции шла сортировка выбором но когда хочу чтоб на экран вывелся весь отсортированный массив то выводиться...


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

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

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