def linsearch_and_print(filename, key):
    file = open(filename, 'r')
    tch_list = []
    for line in file:
        tch_list.append(teacher(*line.replace('\n', '').split(';')))
    file2 = open('Linsearch_result.txt', 'w')
    keys = linear_search(tch_list, key)
    for i in keys:
        file2.write(str(tch_list[i]) + '\n')
    file2.close()
def make(db_file_name, elements_quantity, structure_scheme, structure_data,
         key):

    results = {
        'linear': [],
        'binary+sort': [],
        'binaryinsorted': [],
        'multimap': []
    }

    for count in elements_quantity:
        generate(db_file_name, count, structure_scheme, structure_data)
        print('{} elements '.format(count))

        file = open(db_file_name, 'r')
        tch_list = []
        for line in file:
            tch_list.append(teacher(*line.replace('\n', '').split(';')))

        print("Linear search start")
        tb = time.time()
        linear_search(tch_list, key)
        ta = time.time()
        results['linear'].append((count, ta - tb))

        print("Binary search with merge sort start")
        ta = time.time()
        bin_search(merge_sort(tch_list), 0, len(tch_list), key)
        ta = time.time()
        results['binary+sort'].append((count, ta - tb))

        print("Binary search in sorted array start")
        tch_list_copy = tch_list.copy()
        tch_list_copy = merge_sort(tch_list_copy)
        tb = time.time()
        bin_search(tch_list_copy, 0, len(tch_list_copy), key)
        ta = time.time()
        results['binaryinsorted'].append((count, ta - tb))

        del tch_list_copy

        print("Search in multimap<key, obj> started")
        multimap = multimap_creation(tch_list)
        tb = time.time()
        multimap['КБ']
        ta = time.time()
        results['multimap'].append((count, ta - tb))

        del tch_list
        print('\n')

    xlist = elements_quantity
    ylist1 = [el[1] for el in results['linear']]
    ylist2 = [el[1] for el in results['binary+sort']]
    ylist3 = [el[1] for el in results['binaryinsorted']]
    ylist4 = [el[1] for el in results['multimap']]
    plt.plot(xlist, ylist1, label='Линейный поиск')
    plt.plot(xlist, ylist2, label='Бинарный + сортировка')
    plt.plot(xlist, ylist3, label='Бинарный')
    plt.plot(xlist, ylist4, label='multimap')
    pylab.title(
        'Сравнение линейного, бинарных поисков, и поиска в асс. массиве')
    pylab.xlabel('Количество объектов')
    pylab.ylabel('Время на поиск')
    pylab.legend(title='Легенда')

    print("Linear")
    for element in results['linear']:
        print(str(element[0]) + ';' + str(element[1]))
    print('\n')

    print("Bin + merge sort")
    for element in results['binary+sort']:
        print(str(element[0]) + ';' + str(element[1]))
    print('\n')

    print("Bin")
    for element in results['binaryinsorted']:
        print(str(element[0]) + ';' + str(element[1]))
    print('\n')

    print("Mult")
    for element in results['multimap']:
        print(str(element[0]) + ';' + str(element[1]))
    print('\n')

    pylab.show()
def make(db_file_name, count_range, structure_scheme, structure_data):
    results = {'quick': [], 'bubble': [], 'merge': []}
    for count in count_range:
        print('{} elements '.format(count))
        #Генерируем базу данных
        generate(db_file_name, count, structure_scheme, structure_data)

        #Извлекаем данные из файла в массив
        file = open(db_file_name, 'r')
        tch_list = []
        for line in file:
            tch_list.append(teacher(*line.replace('\n', '').split(';')))

        print('bubble sort start')
        tch_list_sorted = tch_list.copy()
        tb = time.time()  # запускаем счетчик времени
        bubble_sort(tch_list_sorted)  # выполняем сортировку пузырьком
        ta = time.time()
        results['bubble'].append((count, ta - tb))

        del tch_list_sorted

        print('quick sort start')
        tch_list_sorted = tch_list.copy()
        tb = time.time()  # запускаем счетчик времени
        quick_sort(tch_list_sorted)  # выполняем быструю сортировку
        ta = time.time()
        results['quick'].append((count, ta - tb))

        del tch_list_sorted

        print('merge sort start')
        tch_list_sorted = tch_list.copy()
        tb = time.time()  # запускаем счетчик времени
        merge_sort(tch_list_sorted)  # выполняем сортировку слиянием
        ta = time.time()
        results['merge'].append((count, ta - tb))
        print('\n')

        del tch_list_sorted

        del tch_list

    #Построение графиков
    xlist = count_range
    ylist1 = [el[1] for el in results['bubble']]
    ylist2 = [el[1] for el in results['quick']]
    ylist3 = [el[1] for el in results['merge']]
    plt.loglog(xlist, ylist1, label='Сортировка пузырьком')
    plt.loglog(xlist, ylist2, label='Быстрая')
    plt.loglog(xlist, ylist3, label='Сортировка слиянием')
    pylab.title('Сравнение быстрой, пузырьковой и сортировки слиянием')
    pylab.xlabel('Количество объектов')
    pylab.ylabel('Время на сортировку')
    pylab.legend(title='Легенда')

    #Вывод количества элементов, и времени сортировки
    print("Bubble")
    for element in results['bubble']:
        print(str(element[0]) + ';' + str(element[1]))
    print('\n')

    print("Quick")
    for element in results['quick']:
        print(str(element[0]) + ';' + str(element[1]))
    print('\n')

    print("Merge")
    for element in results['merge']:
        print(str(element[0]) + ';' + str(element[1]))
    print('\n')

    pylab.show()
def print_merge_sort(file_name):
    file = open(file_name, 'r')
    tch_list = []
    for line in file:
        tch_list.append(teacher(*line.replace('\n', '').split(';')))
    print(merge_sort(tch_list))