Сортировка массивов на языке СИ

Тема в разделе "C/C++/C#", создана пользователем maximka21, 12 фев 2011.

  1. maximka21

    maximka21 Гость

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

    RiCrO Гость


    Уважаемый автор. Вы случаем с дядей S'меловым Т'арасом L'еонидовичем и его алгоритмом не знакомы?... Могу познакомить :ithx:


    Добавлено: "Покапался" у себя в архиве листингов и наткнулся на мой старенький проектик. Как раз сортировки с моего первого курса.

    maximka21, пользуйся. Препаду очень понравиться. Главное не забудь разобраться и учесть тот факт, что у меня условие "ненулевые" элементы не выполняются. Как этого избежать? Подумай сам. Изменить один символ :)

    Внимание! Когда будешь переносить всё в свой проект, перед ====\n"; и ||||\n"; жми Backspace. Выравнивай...


    Main.cpp

    Код (C++):
    #include "stdafx.h"
    #include "string.h"
    #include <iostream>
    #include "sort.h"
    #include <time.h>
    #include <conio.h>
    #include "memory.h"
    #include <locale>
    #include <Windows.h>
    using namespace std;


    #define BEGIN 100 // Начальное значение количества элементов для генерации.
    #define ABSOLUT 200 // Абсолютное значение - максимум элементов для генерации.

    int _tmain(int argc, _TCHAR* argv[])
    {

    setlocale(LC_ALL,"rus");
    cout << endl;
    cout << "        < Методы Сортировок > - Copyright(2009) RiCrO(r) \n\n";

    cout << "============================================================================
    ====\n"
    ; // Перед этими символами жми Backspace
    cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    ||||\n"
    ; / Перед этими символами жми Backspace
    cout << "============================================================================
    ====\n"
    ;

    cout << " Пожалуйста, подождите. Идёт загрузка";

    Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500);

    cout << endl;
    cout << endl;

    cout << " Данная программа не предназначена для вывода большого количества элементов для сортировки.\n\n";
    cout << " Поэтому рекомендуем ввести меньшее количество элементов для сортировки или же \n выключить вывод этих элементов на экран.";

    Sleep(6000);

    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    ||||\n"
    ;
    cout << "============================================================================
    ====\n"
    ;
    int k[ABSOLUT], f[ABSOLUT];
    char Offnumbers;
    char Lastchance;

    clock_t t1, t2;
    GetRandKey (1);

    cout << " Параметры: \n\n";
    cout << "============================================================================
    ====\n"
    ;
    cout << " Начальное значение для генерации: "<< BEGIN << " чисел.\n";
    cout << " Абсолютное значение - максимум для генерации: "<< ABSOLUT << " чисел.\n\n";
    cout << "============================================================================
    ====\n"
    ;

    Sleep(2000);

    if ( BEGIN > 1000 ) { cout << " ВНИМАНИЕ! Задано высокое начальное значение для генерации!\n Не рекомендуем включать операцию вывода на экран!";}
    if ( BEGIN < 1000 ) { cout << " Операцию вывода на экран можно активировать.";}
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    ||||\n"
    ;
    cout << "============================================================================
    ====\n"
    ;

    Sleep(2000);

    cout << endl;
    cout << " Нажмите <Y> или <y>, если вы хотите просмотреть сгенерированные числа. \n Нажмите <N> или <n>, если хотите просмотреть только результат замера времени    работы цикла.\n\n\n";
    cout << " Ваш выбор: ";
    cin >> Offnumbers;
    cout << endl;
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))
    {
    cout <<" Операция вывода на экран сгенерированных чисел: Включена пользователем.";
    cout << endl;
    cout << endl;
    Sleep(2000);
    cout <<" Подтверждение: ";
    cin >> Lastchance;
    cout << endl;
    Sleep(2000);

    if(BEGIN > 1000)

    {
    cout << "============================================================================
    ====\n"
    ;
    cout <<" ВНИМАНИЕ! Операция вывода на экран сгенерированных чисел включена!. \n\n Активация этой операции может привести к зависанию компьютера или другим      нежелательным последствиям которые могут привести к ошибке работы операционной системы!\n\n Вы уверены что хотите оставить эту функцию включённой?";
    cout << endl;
    cout << " Ваш выбор: ";
    cin >> Lastchance;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    }
    if((Lastchance == 'Y')||(Lastchance == 'y')) {
    Sleep(1000);
    cout << " Пожалуйста, подождите. Идёт активация операций";
    Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500);
    cout << endl;
    cout <<" Операция вывода на экран сгенерированных чисел: Активирована пользователем.";
    Sleep(3000);
    cout << endl;
    cout <<" Операция вывода на экран отсортированных чисел: Активирована пользователем.";}
    if((Lastchance == 'N')||(Lastchance == 'n')) goto loop;
    Sleep(1000);
    cout << endl;
    cout << endl;


    cout << " Пожалуйста, подождите. Идёт загрузка операции";
    Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500);cout << "."; Sleep(500); cout << "."; Sleep(500);
    }


    if((Offnumbers == 'N')||(Offnumbers == 'n'))

    { loop:
    Offnumbers = 'N';
    cout <<" Операция вывода на экран сгенерированных чисел: Отменена пользователем.";
    cout << endl;
    Sleep(1000);
    cout <<" Операция вывода на экран отсортированных чисел: Отменена пользователем.";
    Sleep(1000);
    cout << endl;
    cout << endl;
    cout << " Пожалуйста, подождите. Идёт загрузка операции"; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500);cout << "."; Sleep(500); cout << "."; Sleep(500);
    }




    cout << endl;
    cout << endl;

    for (int i=0; i<ABSOLUT; i++) f[i]=GetRandKey(0);
    for (int n = BEGIN; n<=ABSOLUT; n+=BEGIN)
    {

    cout << "============================================================================
    ====\n"
    ;
    cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    ||||\n"
    ;
    cout << "============================================================================
    ====\n"
    ;
    cout <<"\n                <" << n <<"> элементов для генерации RGEN \n\n" << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "                     Сортировка методом вставки \n\n";
    cout << "============================================================================
    ====\n"
    ;
    cout << " RGEN: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}

    memcpy(k,f,n*sizeof(int));

    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }
    cout << "============================================================================
    ====\n"
    ;
    Sleep(1000);
    cout << "Сгенерированно... ";
    cout << endl;
    cout << endl;
    Sleep(3000);


    cout << "Активация операции сортировки... ";
    Sleep(1000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "Результат после сортировки: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    t1 = clock();
    int SA = SortVstavka(k, n);
    t2 = clock();
    cout << "Loading";
    Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500);

    while ((Offnumbers == 'Y')||(Offnumbers == 'y'))
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n); break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }
    Sleep(3000);
    cout << "============================================================================
    ====\n"
    ;
    cout << "Итоговое время замера времени выполнения цикла сортировки: ";
    cout <<ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<<ends << ends;
    Sleep(5000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    ||||\n"
    ;
    cout << "============================================================================
    ====\n"
    ;



    cout << "                     Cортировка методом выбора\n\n";
    cout << "============================================================================
    ====\n"
    ;
    cout << " RGEN: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    memcpy(k,f,n*sizeof(int));
    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }

    cout << "============================================================================
    ====\n"
    ;
    Sleep(1000);
    cout << "Сгенерированно... ";
    cout << endl;
    cout << endl;
    Sleep(3000);
    cout << endl;
    cout << "Активация операции сортировки... ";
    Sleep(1000);
    cout << endl;
    cout << endl;

    cout << "============================================================================
    ====\n"
    ;
    cout << "Результат после сортировки: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    t1 = clock();
    int SB = SortPrVybora(k, n);
    t2 = clock();
    cout << "Loading";
    Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500);
    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }

    cout << "============================================================================
    ====\n"
    ;
    cout << "Итоговое время замера времени выполнения цикла сортировки: ";
    cout <<ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<<ends << ends;
    Sleep(5000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    ||||\n"
    ;
    cout << "============================================================================
    ====\n"
    ;





    cout << "                     Сортировка методом -пузырька-\n\n";
    cout << "============================================================================
    ====\n"
    ;
    cout << " RGEN: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    memcpy(k,f,n*sizeof(int));
    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }

    cout << "============================================================================
    ====\n"
    ;
    Sleep(1000);
    cout << "Сгенерированно... ";
    cout << endl;
    cout << endl;
    Sleep(3000);
    cout << endl;
    cout << "Активация операции сортировки... ";
    Sleep(1000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "Результат после сортировки: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    t1 = clock();
    int SC = SortPuz(k, n);
    t2 = clock();
    cout << "Loading";
    Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500);
    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }
    cout << "============================================================================
    ====\n"
    ;
    cout << "Итоговое время замера времени выполнения цикла сортировки: ";
    cout <<ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<<ends << ends;
    Sleep(5000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    ||||\n"
    ;
    cout << "============================================================================
    ====\n"
    ;



    cout << "                     Сортировка Шейкера \n\n";
    cout << "============================================================================
    ====\n"
    ;
    cout << " RGEN: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    memcpy(k,f,n*sizeof(int));
    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }

    cout << "============================================================================
    ====\n"
    ;
    Sleep(1000);
    cout << "Сгенерированно... ";
    cout << endl;
    cout << endl;
    Sleep(3000);
    cout << endl;
    cout << "Активация операции сортировки... ";
    Sleep(1000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "Результат после сортировки: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    t1 = clock();
    int SD = SortSheiker(k, n);
    t2 = clock();
    cout << "Loading";
    Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500);
    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }
    cout << "============================================================================
    ====\n"
    ;
    cout << "Итоговое время замера времени выполнения цикла сортировки: ";
    cout <<ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<<ends << ends;
    Sleep(5000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    ||||\n"
    ;
    cout << "============================================================================
    ====\n"
    ;



    cout << "                       Сортировка Шелла \n\n";
    cout << "============================================================================
    ====\n"
    ;
    cout << " RGEN: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    memcpy(k,f,n*sizeof(int));
    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }
    cout << "============================================================================
    ====\n"
    ;
    Sleep(1000);
    cout << "Сгенерированно... ";
    cout << endl;
    cout << endl;
    Sleep(3000);
    cout << endl;
    cout << "Активация операции сортировки... ";
    Sleep(1000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "Результат после сортировки: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    t1 = clock();
    int SE = SortShella(k, n);
    t2 = clock();
    cout << "Loading";
    Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500);
    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }
    cout << "============================================================================
    ====\n"
    ;
    cout << "Итоговое время замера времени выполнения цикла сортировки: ";
    cout <<ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<<ends << ends;
    Sleep(5000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    ||||\n"
    ;
    cout << "============================================================================
    ====\n"
    ;




    cout << "                        Сортировка подсчётом \n\n";
    cout << "============================================================================
    ====\n"
    ;
    cout << " RGEN: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    memcpy(k,f,n*sizeof(int));
    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }

    cout << "============================================================================
    ====\n"
    ;
    Sleep(1000);
    cout << "Сгенерированно... ";
    cout << endl;
    cout << endl;
    Sleep(3000);
    cout << endl;
    cout << "Активация операции сортировки... ";
    Sleep(1000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "Результат после сортировки: ";
    if((Offnumbers == 'N')||(Offnumbers == 'n')){ cout <<"Отменён пользователем.\n\n";}
    t1 = clock();
    int SF = Podschet(k, n);
    t2 = clock();
    cout << "Loading";
    Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << "."; Sleep(500); cout << ".\n\n"; Sleep(500);
    while (true)
    {
    if((Offnumbers == 'Y')||(Offnumbers == 'y'))Print (k,n);break;Print (k,n);break;
    if((Offnumbers == 'N')||(Offnumbers == 'n')) break;
    }
    cout << "============================================================================
    ====\n"
    ;
    cout << "Итоговое время замера времени выполнения цикла сортировки: ";
    cout << ends <<((double)(t2-t1))/((double)CLOCKS_PER_SEC)<< ends << ends;
    Sleep(5000);
    cout << endl;
    cout << endl;
    cout << "============================================================================
    ====\n"
    ;
    cout << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    ||||\n"
    ;
    cout << "============================================================================
    ====\n"
    ;


    cout << endl;
    cout << endl;

    }

    return 0;
    }
    sort.cpp

    Код (C++):
    #include "stdafx.h"
    #include <iostream>
    #include "string.h"
    #include "sort.h"
    #include "time.h"
    using namespace std;
    int GetRandKey(int reg = 0)
    {
    if (reg > 0) srand((unsigned)time(NULL));
    int rmin = 0;            
    int rmax = 100;  
    return (int)(((double) rand()/(double)RAND_MAX)*(rmax-rmin) + rmin);
    }

    void Print (int m[], int n)
    {
    for (int i=0; i<n; i++)
    cout << m[i] << ends;
    cout << endl;
    }
    int SortVstavka (int m[], int n)
    {
    int buf, k;
    for (int i=1; i<n; i++)
    {
    buf = m[i];
    k = i-1;
    while (m[k]>buf) m[k+1] = m[k--];
    m[k+1] = buf;
    }
    return *m;
    }

    int SortPrVybora (int m[], int n)
    {
    for (int i=0; i<n; i++)
    for (int j=i+1; j<+n; j++)
    {
    if (m[i]>m[j])
    {
    int buf = m[i];
    m[i]=m[j];
    m[j]=buf;
    }
    }
    return *m;
    }
    int SortPuz (int m[], int n)
    {
    for (int i=0; i<n; i++)
    for (int j=0; j<n-i-1; j++)
    {
    if (m[j]>m[j+1])
    {
    int buf = m[j];
    m[j] = m[j+1];
    m[j+1] = buf;
    }
    }
    return *m;
    }
    int SortSheiker (int m[], int n)
    {
    bool end = false;
    for (int i=0; (i<n) && !end; i++)
    {
    end = true;
    for (int j=0; j<n-i-1; j++)
    {
    if (m[j]>m[j+1])
    {
    int buf = m[j];
    m[j] = m[j+1];
    m[j+1] = buf;
    end = false;
    }
    }
    }
    return *m;
    }
    int SortShella(int m[], int n)
    {
    int buf;
    bool sort;
    for (int g = n/2; g > 0; g/=2)
    {
    do
    {
    sort = false;
    for (int i = 0, j = g; j < n; i++,j++)
    {
    if (m[i] > m[j])
    {
    sort = true;
    buf = m[i];
    m[i] = m[j];
    m[j] = buf;
    }
    }
    } while (sort);
    }
    return *m;
    }

    int Podschet(int m[],int n)
    { int i,j ,cnt;
    int temp[5000];
    for (i=0; i < n; i++)
    {
    for ( cnt=0,j=0; j<n; j++)
    if (m[j] < m[i]) cnt++;
    temp[cnt]=m[i];
    }

    return 0;
    }
    sort.h

    Код (C++):
    #pragma once
    int SortVstavka (int m[], int n);
    int SortPrVybora (int m[], int n);
    int SortPuz (int m[], int n);
    int SortSheiker (int m[], int n);
    int SortShella(int m[], int n);
    int GetRandKey(int reg);
    int Podschet(int m[],int n);
    void Print (int m[], int n);
     
Загрузка...
Похожие Темы - Сортировка массивов на
  1. vera2014
    Ответов:
    0
    Просмотров:
    1.071
  2. Liori
    Ответов:
    2
    Просмотров:
    1.005
  3. FCDK
    Ответов:
    0
    Просмотров:
    1.264
  4. ленарано
    Ответов:
    1
    Просмотров:
    1.103
  5. Creder
    Ответов:
    0
    Просмотров:
    1.345

Поделиться этой страницей