1.sorts method python (9)merge_sort

归并排序:

原理:https://www.cnblogs.com/chengxiao/p/6194356.html

这应该是我写的最蠢的一个代码了,不,可能以后还能写出更蠢的。。。。冗长,只能实现2**n 次方数组排序。。。准备接受鄙视了...

# -*- coding: utf-8 -*-
"""
Created on Wed Jul 31 10:14:28 2019

@author: yue zhang

E-mails: [email protected]
""" 
import numpy as np

def merge(data1,data2):
      print(data1)  
      print(data2) 
      length1 = len(data1)
      length2 = len(data2)
      result = []
      i=0
      j=0
      while i data2[j]:
                  result.append(data2[j])
                  j=j+1
            else:
                  result.append(data1[i])
                  i=i+1
      while i

标准答案附上:https://github.com/TheAlgorithms/Python/blob/master/sorts/merge_sort.py

"""
This is a pure python implementation of the merge sort algorithm
For doctests run following command:
python -m doctest -v merge_sort.py
or
python3 -m doctest -v merge_sort.py
For manual testing run:
python merge_sort.py
"""
def merge_sort(collection):
    """Pure implementation of the merge sort algorithm in Python
    :param collection: some mutable ordered collection with heterogeneous
    comparable items inside
    :return: the same collection ordered by ascending
    Examples:
    >>> merge_sort([0, 5, 3, 2, 2])
    [0, 2, 2, 3, 5]
    >>> merge_sort([])
    []
    >>> merge_sort([-2, -5, -45])
    [-45, -5, -2]
    """
    def merge(left, right):
        '''merge left and right
        :param left: left collection
        :param right: right collection
        :return: merge result
        '''
        result = []
        while left and right:
            result.append((left if left[0] <= right[0] else right).pop(0))
        return result + left + right
    if len(collection) <= 1:
        return collection
    mid = len(collection) // 2
    return merge(merge_sort(collection[:mid]), merge_sort(collection[mid:]))


if __name__ == '__main__':
    user_input = input('Enter numbers separated by a comma:\n').strip()
    unsorted = [int(item) for item in user_input.split(',')]
    print(*merge_sort(unsorted), sep=',')

另一版本:https://github.com/TheAlgorithms/Python/blob/master/sorts/merge_sort_fastest.py

'''
Python implementation of the fastest merge sort algorithm.
Takes an average of 0.6 microseconds to sort a list of length 1000 items.
Best Case Scenario : O(n)
Worst Case Scenario : O(n^2) because native python functions:min, max and remove are already O(n)
'''
def merge_sort(collection):
    """Pure implementation of the fastest merge sort algorithm in Python
    :param collection: some mutable ordered collection with heterogeneous
    comparable items inside
    :return: a collection ordered by ascending
    Examples:
    >>> merge_sort([0, 5, 3, 2, 2])
    [0, 2, 2, 3, 5]
    >>> merge_sort([])
    []
    >>> merge_sort([-2, -5, -45])
    [-45, -5, -2]
    """
    start, end = [], []
    while len(collection) > 1:
        min_one, max_one = min(collection), max(collection)
        start.append(min_one)
        end.append(max_one)
        collection.remove(min_one)
        collection.remove(max_one)
    end.reverse()
    return start + collection + end


if __name__ == '__main__':
    user_input = input('Enter numbers separated by a comma:\n').strip()
    unsorted = [int(item) for item in user_input.split(',')]
    print(*merge_sort(unsorted), sep=',')

 

你可能感兴趣的:(python,Coding,Practice)