Quick actions

cmd+k|ctrl+k

Navigation

Languages

laba 2 ir.

Snippet info

Language

Cpp

Visibility

public

Author

muzon4ik

Created

2017-10-11T07:23:32Z

Updated

2017-10-18T17:57:03Z


#include <iostream>
#include <cstring>
using namespace std;

template <typename T>
void print(T *mas, int size){
    for(int i=0; i<size; i++)
        cout<<mas[i];
    cout<<endl;
}

template <typename T>
void qsortRecursive(T *mas, int size){
    //Указатели в начало и в конец массива
    int i = 0;
    int j = size - 1;
    
    //Центральный элемент массива
    int mid = mas[size / 2];
    
    //Делим массив
    do {
        //Пробегаем элементы, ищем те, которые нужно перекинуть в другую часть
        //В левой части массива пропускаем(оставляем на месте) элементы, которые меньше центрального
        while(mas[i] < mid) {
            i++;
        }
        //В правой части пропускаем элементы, которые больше центрального
        while(mas[j] > mid) {
            j--;
        }
        
        //Меняем элементы местами
        if (i <= j) {
            int tmp = mas[i];
            mas[i] = mas[j];
            mas[j] = tmp;
            
            i++;
            j--;
        }
    } while (i <= j);
    
    
    //Рекурсивные вызовы, если осталось, что сортировать
    if(j > 0) {
        //"Левый кусок"
        qsortRecursive(mas, j + 1);
    }
    if (i < size) {
        //"Првый кусок"
        qsortRecursive(&mas[i], size - i);
    }
}


int main()
{
    char array [] = "aodsiafgerkeio";
    int len = strlen(array);
    cout << "Не отсортированный массив типа char: ";
    print(array, len);
    qsortRecursive(array, len);
    cout << "Отсортированный массив типа char: ";
    print(array, len);

    int iArray [5] = {3,5,7,2,9};
    cout << "Не отсортированный массив типа int: ";
    print(iArray, 5);
    qsortRecursive(iArray, 5);
    cout << "Отсортированный массив типа int: ";
    print(iArray, 5);
    return 0;
}

INFO