Сортировки

Задача: отсортировать массив используя различные методы сортировок:

     "Пузырьком",
     "Отбора",
     "Вставки",
     "Шелла",
     "Быстрая сортировка"

Решение:

----------------------- Файл L11.cpp -----------------------

// Сортировка пузырьком
#ifndef __SORT_1_1
#define __SORT_1_1
template <class Stype> void bubble(Stype *item, int count){
     register int a,b;
     Stype t;
     for(a=1;a<count;++a)
     for(b=count-1;b>=a;--b){
          if(item[b-1]>item[b]){
               t=item[b-1];
               item[b-1]=item[b];
               item[b]=t;
          }
     }
}
#endif

----------------------- Файл L12.cpp -----------------------
// Сортировка методом отбора


#ifndef __SORT_1_2
#define __SORT_1_2
template <class Stype> void select(Stype *item,int count){
     register int a,b,c;
     int exchange;
     Stype t;
     for(a=0;a<count-1;++a){
          exchange = 0;
          c=a;
          t=item[a];
          for(b=a+1;b<count;++b){
               if(item[b]<t){
                    c=b;
                    t=item[b];
                    exchange=1;
               }
          }
          if(exchange){
               item[c]=item[a];
               item[a]=t;
          }
     }
}
#endif

----------------------- Файл L13.cpp -----------------------
// Сортировка методом вставки


#ifndef __SORT_1_3
#define __SORT_1_3

template <class Stype> void insert(Stype *item,int count){
     register int a,b;
     Stype t;
     for(a=1;a<count;++a){
          t=item[a];
          for(b=a-1;b>=0&&t<item[b];b--)
               item[b+1]=item[b];
          item[b+1]=t;
     }
}
#endif

----------------------- Файл L14.cpp -----------------------
// Сортировка методом Шелла


#ifndef __SORT_1_4
#define __SORT_1_4

template <class Stype> void shell(Stype *item, int count){
     register int i,j,gap,k;
     Stype x;
     char a[5]={9,5,3,2,1};
     for(k=0;k<5;k++){
          gap=a[k];
          for(i=gap;i<count;++i){
               x=item[i];
               for(j=i-gap;x<item[j] && j>=0; j=j-gap)
                    item[j+gap]=item[j];
               item[j+gap]=x;
          }
     }
}
#endif

----------------------- Файл L15.cpp -----------------------
// Метод быстрой сортировки


#ifndef __SORT_1_5
#define __SORT_1_5

template <class Stype> void qs(Stype *item,int left,int right){
     register int i,j;
     Stype x,y;
     i=left; j=right;
     x=item[(left+right)/2];
     do{
          while(item[i]<x&&i<right) i++;
          while(x<item[j]&&j>left) j--;
     if(i<=j){
          y=item[i];
          item[i]=item[j];
          item[j]=y;
          i++;y--;
     }
     }while(i<=j);
     if(left<j) qs(item,left,j);
     if(i<right) qs(item,i,right);
}

template <class Stype> void quick(Stype *item, int count){
     qs(item,0,count-1);
}

#endif

----------------------- Файл L1.cpp ----------------------- (MAIN HERE)

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#include "l11.cpp" //Пузырьковая
#include "l12.cpp" //Отбора
#include "l13.cpp" //Вставки
#include "l14.cpp" //Шелла
#include "l15.cpp" //Быстрая сортировка

const char *so[5]={
     "Пузырьком",
     "Отбора",
     "Вставки",
     "Шелла",
     "Быстрая сортировка"
};

int chooze(){
     int i;
     do{
          printf("\nВыберите метод сортировки:\n"
          "\t1 - %s\n"
          "\t2 - %s\n"
          "\t3 - %s\n"
          "\t4 - %s\n"
          "\t5 - %s\n?:"
          ,so[0],so[1],so[2],so[3],so[4]);
          scanf("%d",&i);
     }while(i<1||i>5);
     return i;
}

void main(){
     int *mas, // Сортируемый массив
     n,i,aut,sp; char ch;

     do{
          clrscr();
          printf("\nЧисло элементов: "); scanf("%d",&n);
          printf("\nАвтозаполнение? (1-Да,0-Нет): "); scanf("%d",&aut);
          mas = new int[n];
          for(i=0;i<n;i++){
                    printf("Mas[%d]=",i);
                    if(aut){
                              mas[i]=rand(); printf("%d\t",mas[i]);
                    } else
                              scanf("%d",&mas[i]);
          }
          sp=chooze();
          switch(sp){
          case 1: bubble(mas,n); break;
          case 2: select(mas,n); break;
          case 3: insert(mas,n); break;
          case 4: shell(mas,n); break;
          case 5: quick(mas,n); break;
          };
          printf("Отсортированный массив: \n");
          for(i=0;i<n;i++){
                    printf("Mas[%d]=%d\t",i,mas[i]);
          }
          printf("\nИспользован способ: %s \n",so[sp-1]);
          delete [] mas;

          printf("\nПродолжить (Y-да) ");
          ch=getche();
     }while(ch=='Y'||ch=='y');
     clrscr();
     printf("Bye");
}

[Top] [Home]

Используются технологии uCoz