Варианты индивидуальных заданий



 

Методы сортировки

1.Сортировка по возрастанию методом выбора минимума.

2.Сортировка по возрастанию методом выбора максимума.

3.Сортировка по убыванию методом выбора минимума.

4.Сортировка по убыванию методом выбора максимума.

5.Сортировка по возрастанию методом обмена без флага перестановки.

6.Сортировка по убыванию методом обмена без флага перестановки.

7.Сортировка по возрастанию методом обмена с флагом перестановки.

8.Сортировка по убыванию методом обмена с флагом перестановки.

9.Сортировка по возрастанию методом вставки.

10.Сортировка по убыванию методом вставки.

11.Быстрая сортировка по возрастанию.

12.Быстрая сортировка по убыванию.

 


Области сортировки элементов матриц

 

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.

                 

 


Примеры программ

Пример №1

 

//Методы сортировки массивов данных.

//Массивы одномерные статические.

#include<iostream.h>

#include <locale.h>

//using namespace std;

const int RAZ = 10 ;   //размер массива

typedef int telem ;    //определение типа элементов массива

typedef telem tmas[RAZ] ; //определение типа массива

 

void outputmas(tmas a, int n) ; //вывод значений элементов массива

void sort_obmen(tmas a, int n) ; //сортировка методом обмена

void sort_obmenF(tmas a, int n) ; //сортировка методом обмена с флагом

void sort_vibor(tmas a, int n) ; //сортировка методом выбора

void sort_vstav(tmas a, int n) ; //сортировка методом вставки

void sort_quick(tmas a, int t, int n) ; //метод быстрой сортировки

 

int main()

{tmas mas_a = {10,9,8,7,6,5,4,3,2,1} ;    //исходный массив а

 tmas mas_b = {19,17,15,13,11,9,7,5,3,1} ; //исходный массив b

 tmas mas_c = {20,18,16,14,12,10,8,6,4,2} ; //исходный массив c

 tmas mas_d = {1,10,2,9,3,8,4,7,5,6} ;    //исходный массив e

 tmas mas_e = {2,9,4,10,7,1,6,5,3,8} ;    //исходный массив f

 int n;

 setlocale(LC_ALL,"Russian") ;

 cout << " Примеры методов сортировки массивов целых чисел" << endl ;

 cout << " Исходный массив а: " << endl ;

 outputmas(mas_a, RAZ) ;

 cout << "\n Отсортированный массив а (метод обмена):" << endl ;

 sort_obmen(mas_a, RAZ) ;

 outputmas(mas_a, RAZ) ;

 cout << "\n Исходный массив b: " << endl ;

 outputmas(mas_b, RAZ) ;

 cout<<"\n Отсортированный массив b (метод обмена с флагом):" <<endl ;

 sort_obmenF(mas_b, RAZ) ;

 outputmas(mas_b, RAZ) ;

 cout << "\n Исходный массив c: " << endl ;

 outputmas(mas_c, RAZ) ;

 cout<<"\n Отсортированный массив c (метод выбора минимума):" <<endl ;

 sort_vibor(mas_c, RAZ) ;

 outputmas(mas_c, RAZ) ;

 cout << "\n Исходный массив d: " << endl ;

 outputmas(mas_d, RAZ) ;

 cout << "\n Отсортированный массив d (метод вставки):" << endl ;

 sort_vstav(mas_d, RAZ) ;

 outputmas(mas_d, RAZ) ;

 cout << "\n Исходный массив e: " << endl ;

 outputmas(mas_e, RAZ) ;

 cout<<"\nОтсортированный массив e (метод быстрой сортировки):"<<endl;

 sort_quick(mas_e, 0, RAZ - 1) ;

 outputmas(mas_e, RAZ) ;

 return 0 ;

}

//сортировка элементов массива по возрастанию методом обмена без флага

void sort_obmen(tmas a, int n)

{ int i, k ;

telem z ;

for(k = n ; k > 0 ; k--)

for(i = 0 ; i < k - 1 ; i++)

if(a[i] > a[i + 1])

{z = a[i] ;

a[i] = a[i + 1] ;

a[i + 1] = z ;

}

}

//сортировка элементов массива по возрастанию методом обмена с флагом

void sort_obmenF(tmas a, int n)

{ int i, k, flag ;

telem z ;

k = n ; //начальное количество не отсортированных элементов

do{flag = 0 ;

for(i = 0 ; i < k - 1 ; i++)

if(a[i] > a[i + 1])

{z = a[i] ;

a[i] = a[i + 1];

a[i + 1] = z ;

flag = 1 ;

}

k-- ;

}while(flag);

}

//сортировка элементов массива по возрастанию методом выбора минимума

void sort_vibor(tmas a, int n)

{ int i, k, imin ;

telem z ;

for(i = 0 ; i < n - 1 ; i++)

{imin = i ; //поиск очередного минимума

for(k = i + 1 ; k < n ; k++)

if(a[k] < a[imin]) imin = k ;

//перестановка элементов

z = a[i] ;

a[i] = a[imin] ;

a[imin] = z ;

}

}

 

//сортировка элементов массива по возрастанию методом вставки

void sort_vstav(tmas a, int n)

{ int i, j, k ;

telem z ;

for(i = 1 ; i < n ; i++)

{z = a[i] ;   //выделение текущего элемента

j = 0 ;

//поиск места вставки

while(j < i && a[j] <= a[i]) j++ ;

for(k = i - 1 ; k >= j ; k--)

 a[k + 1] = a[k] ; //сдвиг элементов

a[j] = z ;

}

}

//сортировка элементов массива по возрастанию методом быстрой сортировки

void sort_quick(tmas a, int t, int n)

{ int i = t,  //левая граница сортируемого фрагмента

j = n ; //правая граница сортируемого фрагмента

telem x, y ;

x = a[(t + n) / 2] ;

do{

while(a[i] < x) i++ ;

while(x < a[j]) j-- ;

if(i <= j)

  {y = a[i] ;

a[i] = a[j] ;

a[j] = y ;

i++ ;

j-- ;

  }

}while(i < j);

if(t < j) sort_quick(a, t, j) ;

if(i < n) sort_quick(a, i, n) ;

}

void outputmas(tmas a, int n)

{for(int i = 0 ; i < n ; i++)

cout << a[i] << ' ' ;

}

 

Пример №2

//Методы сортировки

//Массивы динамические двумерные

//Сортировка элементов всех строк двумерного массива целых чисел

//по убыванию

 

#include<iostream.h>

#include <locale.h>

//using namespace std;

 

typedef int telem ; //определение типа элементов массива

typedef telem *tstr ; //определение типа "указатель на telem"

typedef tstr *tmatr; //определение типа "указатель на указатель на telem"

void inputmatr(tmatr a, int str, int sto) ;

void outputmatr(tmatr a, int str, int sto) ;

void sort_obmenF(tmatr a, int str, int sto) ;

 

 

int main()

{ int i, j ;

int n ; //число строк матрицы

int m ; //число столбцов матрицы

tmatr a; //объявляется переменная-указатель на указатель на telem

setlocale(LC_ALL,"Russian") ;

cout << "\nВведите количество строк и столбцов матрицы: " ;

cin >> n >> m;

a = new tstr [n] ; //выделение динамической памяти под массив

         //указателей на строки массива

for(i = 0; i < n; i++) //цикл выделения памяти под каждую строку

*(a + i) = new telem [m] ;//каждому элементу массива указателей

                   //на строки присваивается адрес начала

              //области памяти, выделяемой под строку

inputmatr(a, n, m) ;

cout << "Исходная матрица:\n" ;

outputmatr(a, n, m) ;

sort_obmenF(a, n, m) ;

cout << "Матрица с отсортированными строками:" << endl ;

outputmatr(a, n, m) ;

cout << endl ;

//Освобождение динамической памяти

for(i = 0; i < n; i++)

delete a[i] ;

delete a ;

return 0 ;

}

 

void inputmatr(tmatr a, int str, int sto)

{ cout << "Введите построчно через пробел элементы" << endl ;

cout << "двумерного массива размера " << str << "x" << sto << endl ;

cout << "После ввода строки нажимайте <Enter>" << endl ;

for(int i = 0 ; i < str ; i++)

for(int j = 0 ; j < sto ; j++)

 *(*(a + i) + j) = 10 * i + j;

}

//сортировка элементов массива по возрастанию методом обмена с флагом

void sort_obmenF(tmatr a, int str, int sto)

{ int i, j, k, flag ;

telem z ;

for(i = 0 ; i < str ; i++)

{k = sto ; //начальное количество не сортированных элементов строки

do{flag = 0 ;

 for(j = 0 ; j < k - 1 ; j++)

if(*(*(a + i) + j) < *(*(a + i) + j + 1))

{z = *(*(a + i) + j) ;

  *(*(a + i) + j) = *(*(a + i) + j + 1);

  *(*(a + i) + j + 1) = z ;

  flag = 1 ;

}

 k-- ;

}while(flag);

}

}

void outputmatr(tmatr a, int str, int sto)

{ int i, j ;

for(i = 0; i < str; i++)

{for(j = 0; j < sto; j++)

 {cout.width(2) ; //ширина поля выводимого параметра

cout << *(*(a + i) + j) << ' ' ;

 }

cout << '\n';

}

}

 

 


Лабораторная работа №11


Дата добавления: 2018-04-05; просмотров: 618; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!