Навигация
 
Главная
Для начинающих
Паскаль/Pascal
Bash

Визуальное программирование
• Visual Basic
• Delphi/Делфи
• C++/Си++/Си
• документация
• Компоненты

WEB программирование
• MySQL/мускул
• Web-дизайн
•• Шрифты
• PHP/Пхп
• Документация PHP
• JavaScript
•• библиотека jquery
•  Документация
Прочее

 
 
Поиск по сайту
 




 
 
О нас
  У нас Вы можете скачать исходники, скачать скрипты, найти исходники, исходники delphi, документация по JQeury, исходники си, учебник HTML  
 
Теги
  codeserfercom, Linux, nbspnbsp, Private, Visual, Возможность, Пример, Рассмотрим, Сегодня, Теперь, будет, данных, значение, который, может, можно, написать, например, очень, переменной, переменных, пользователя, помощью, программа, программирования, программы, просто, работы, разработки, решил, сделать, скрипт, строки, строку, также, только, функции, число, этого, языка

Показать все теги
 
 
Счетчики
 
 
 
Реклама
   
 
Лучшие коды
   
   
 
Сортировка
 Категория: Визуальное программирование » C | автор: ISergey | 7 июля 2009 | Просмотров: 3349  



 
Сортировка выбором
Идея метода состоит в том, чтобы создавать отсортированную последовательность путем присоединения к ней одного элемента за другим в правильном порядке.

template<typename T>
void select_sort(T a[], int size)
{
    int k;
    T x;

    for(int i = 0; i < size; ++i)        // i - номер текущего шага
    {
        k = i;
        x = a[i];
        for(int j = i + 1; j < size; ++j)// цикл выбора наименьшего элемента
            if ( a[j] < x )
            {
                k = j;                    // k - индекс наименьшего элемента
                x = a[j];
            }
        a[k] = a[i];
        a[i] = x;                        // меняем местами наименьший с a[i]
    }
}


Если входная последовательность почти упорядочена, то сравнений будет столько же, значит алгоритм ведет себя неестественно.

Сортировка пузырьком

Идея метода: шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами.
template<typename T>
void bubble_sort(T a[], int size) {
    T x;

    for(int i = 0; i < size; ++i) // i - номер прохода
    {            
        for(int j = size - 1; j > i; --j) // внутренний цикл прохода
        {    
            if ( a[j-1] > a[j] )
            {
                x = a[j-1];
                a[j-1] = a[j];
                a[j] = x;
            }
        }
    }
}

Дополнительная память, очевидно, не требуется. Поведение усовершенствованного (но не начального) метода довольно естественное, почти отсортированный массив будет отсортирован намного быстрее случайного. Сортировка пузырьком устойчива, однако шейкер-сортировка утрачивает это качество.
На практике метод пузырька, даже с улучшениями, работает слишком медленно. А потому - почти не применяется.

Сортировка вставками

Сортировка простыми вставками в чем-то похожа на вышеизложенные методы.
template<typename T>
void insert_sort(T a[], int size)
{
    T x;
    int j;

    for (int i = 0; i < size; ++i)
    {  
        x = a[i];  
        // поиск места элемента в готовой последовательности
        for (j = i - 1; j >= 0 && a[j] > x; --j)
            a[j+1] = a[j];    // сдвигаем элемент направо, пока не дошли
        // место найдено, вставить элемент
        a[j+1] = x;
    }
}

Аналогично сортировке выбором, среднее, а также худшее число сравнений и пересылок оцениваются как Theta(n2), дополнительная память при этом не используется.

Хорошим показателем сортировки является весьма естественное поведение: почти отсортированный массив будет досортирован очень быстро. Это, вкупе с устойчивостью алгоритма, делает метод хорошим выбором в соответствующих ситуациях.

Ну Собственно проверка
template<typename T>
void out_arr(T arr[], int size)
{
    for(int i = 0; i < size; ++i)
        std::cout << arr[i] << " ";
}

int main()
{
    int arr0[6] = {9,5,4,6,2,1};
    int arr1[6] = {9,5,4,6,2,1};
    int arr2[6] = {9,5,4,6,2,1};
    select_sort(arr0, 6);
    bubble_sort(arr1, 6);
    insert_sort(arr2, 6);

    out_arr(arr0, 6); std::cout << '\n';
    out_arr(arr1, 6); std::cout << '\n';
    out_arr(arr2, 6); std::cout << '\n';

    return 0;
}


Имхо лучше юзать std::sort().
#include <iostream>
#include <algorithm>
#include <functional>

int main()
{
    int arr[] = {9,8,7,6,5,4,3,2,1};
    int size = sizeof(arr)/sizeof(int);

    std::sort(arr, arr + size);
    std::copy(arr, arr + size, std::ostream_iterator<int>(std::cout," "));
    std::cout << '\n';

    std::sort(arr, arr + size,std::greater<int>());
    std::copy(arr, arr + size, std::ostream_iterator<int>(std::cout," "));
    std::cout << '\n';
    return 0;
}


PS.
Если вы новичок,и не понимаете,что такое template или не проходили этого, то есть два способа справиться с этой проблемой:
1. Загуглить "Шаблоны С++. Материал простой,разберетесь"
2. Убрать эту надпись,а в прототипе букву T заменить типом вашего массива (int, double,..etc)

Про std::sort() можно посмотреть здесь
 
 

Что-то не получается? Не понятна какая-то часть кода? Напишите комментарий об этом и мы обязательно Вам все объясним!
Обязательно напишите отзыв о программе / учебнике. Для выражения благодарностей есть кнопка:


Своё Спасибо, еще не выражали.
 
  Просьбы перезалить в комментариях принимаются
 
 (голосов: 2)
 
 
 
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
 
  Другие коды по теме:  
 
  • Нахождение всех совершенных чисел от 1 до n
  • Определяем расширение экрана с помощью WinAPI
  • Обращение к WhoIs для IP на PHP
  • Галерея изображений
  • Магические исчезновения
  •  
    Комментарии (0) Распечатать




    © 2008 - 2010. Копирование материалов запрещено!
    Мой аккаунт
     
    Логин
    Пароль
     
     
     
    Опрос
     
    Какой архиватор используете вы?

    WinRAR
    WinZip
    7-zip
    CabTools
    Сижу на linux, все в .rpm .deb
    Другой
     
     
    Друзья
     
    serial, crack, keygen
    cool-archive.ru
    ABC-IT.lv - истиному ИТишнику!
     
     
    Архив кодов
      Август 2011 (1)
    Июль 2011 (4)
    Июнь 2011 (3)
    Апрель 2011 (2)
    Февраль 2011 (5)
    Январь 2011 (3)
     
     
     
    Реклама