Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python上的合并排序:获得的结果的不寻常模式_Python_Python 2.7_Mergesort - Fatal编程技术网

Python上的合并排序:获得的结果的不寻常模式

Python上的合并排序:获得的结果的不寻常模式,python,python-2.7,mergesort,Python,Python 2.7,Mergesort,我有一个从0到9999的10000个整数的未排序数组。我想对这个未排序的数组应用合并排序,并编写了以下代码- import sys def merge_sort(data): result = [] if len(data) <= 1: return data else: mid = int(len(data)/2) left = data[:mid] right = data[mid:]

我有一个从0到9999的10000个整数的未排序数组。我想对这个未排序的数组应用合并排序,并编写了以下代码-

import sys
def merge_sort(data):
    result = []
    if len(data) <= 1:
        return data
    else:
        mid = int(len(data)/2)
        left = data[:mid]
        right = data[mid:]
        sorted_left = merge_sort(left)
        sorted_right = merge_sort(right)
        i = j = k = 0
        total_len = len(sorted_left) + len(sorted_right)
        for k in range(0, total_len):
            if i < len(sorted_left) and j < len(sorted_right):
                if sorted_left[i] < sorted_right[j]:
                    result.append(sorted_left[i])
                    i = i+1
                    k = k+1
                elif sorted_left[i] > sorted_right[j]:
                    result.append(sorted_right[j])
                    j = j+1
                    k = k+1
            elif i < len(sorted_left):
                result.append(sorted_left[i])
                i = i+1
                k = k+1
            elif j < len(sorted_right):
                result.append(sorted_right[j])
                j = j+1
                k = k+1
            else:
                sys.exit("There is some issue with the code")
        return result
print merge_sort(data)
导入系统 def合并_排序(数据): 结果=[] 如果len(数据)排序正确[j]: result.append(排序右[j]) j=j+1 k=k+1 如果i 因此,当我对这些数据进行排序时,除了少数条目外,我得到了正确的排序顺序。例如,在接近结束时,我得到了这种结果-

[…'9989','999','9990','9991','9992','9993','9994','9995','9996','9997','9998','9999']

正如您可能观察到的,号码“999”位于错误的位置。不只是在这个片段中,它也发生在其他地方,比如出现在'9949'和'9950'之间的'995'。那么有人知道为什么会发生这种情况吗?
附带说明-我运行此代码进行调试,运行时没有出现错误,生成了这些结果。

您正在订购字符串:

'9989'<'999'<'9990'
。如果要对整数进行排序,必须将输入列表转换为整数。

数据是以字符串还是整数的形式输入的?根据示例输出,它们是字符串


在这种情况下,“1”正好在“10”之前。如果需要整数,则可以将其转换为int进行排序。

您的
数据是字符串,而不是数字。要转换为整数,请使用:

data = [int(x) for x in data]
Python将“比较”各种各样的对象。例如:

>>> "a" < "ab"
True
>>> None < "a"
True
>>> 1 < "a"
True

通过为对象定义自己的方法,有很大的灵活性。

看起来数据是字符串,而不是数字。字符串排序导致您看到的顺序。在将数据传递到
merge\u sort
之前,请尝试将数据转换为整数。我将首先尝试将其解析为numbersTry:
data=[int(x)for x in data]
。是的,它成功了!!对我来说,知道代码是如何比较这两个字符串是很奇怪的。。。
object.__lt__(self, other)
object.__le__(self, other)
object.__eq__(self, other)
object.__ne__(self, other)
object.__gt__(self, other)
object.__ge__(self, other)