Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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_Arrays_Sorting_Mergesort - Fatal编程技术网

Python 数组合并排序计数和排序时间

Python 数组合并排序计数和排序时间,python,arrays,sorting,mergesort,Python,Arrays,Sorting,Mergesort,我创建了一个程序,其中数字是为列表/数组随机生成的。在这个列表中,我需要计算排序列表所需的时间,以及排序所需的交换数量 下面是我的代码。代码解决列表时没有任何问题,但时间和交换计数器工作不正常,它只会给出类似于0,1,1,1,2,1,1,0,2,4的结果 我是否在开始时间和结束时间添加计数时出错 import random import time #X-------------------------------------------------------------------------

我创建了一个程序,其中数字是为列表/数组随机生成的。在这个列表中,我需要计算排序列表所需的时间,以及排序所需的交换数量

下面是我的代码。代码解决列表时没有任何问题,但时间和交换计数器工作不正常,它只会给出类似于0,1,1,1,2,1,1,0,2,4的结果

我是否在开始时间和结束时间添加计数时出错

import random
import time
#X--------------------------------------------------------------------------------------------------------------------------------------------------------------------

# Random Number Generator
def random_generator():
    randomNumber = random.randint(0, 1000)
    return randomNumber
#X--------------------------------------------------------------------------------------------------------------------------------------------------------------------

def arraygenerator():
    arr = []
    for draw in range(8):
        randomNumber = random_generator()
        arr.append(randomNumber)
    print ("Unsorted Array is : ", arr)
    return arr
#X--------------------------------------------------------------------------------------------------------------------------------------------------------------------
#Insertion Sort
def mergeSort(A):
    

    b = 0
    start = time.time() # Start Timmer
    if len(A) > 1:
 
         # Finding the mid of the array
            mid = len(A)//2
 
        # Dividing the array elements
            L = A[:mid]
 
        # into 2 halves
            R = A[mid:]
 
        # Sorting the first half
            mergeSort(L)
 
        # Sorting the second half
            mergeSort(R)
 
            i = j = k = 0
            
 
        # Copy data to temp arrays L[] and R[]
            while i < len(L) and j < len(R):
                if L[i] < R[j]:
                    A[k] = L[i]
                    i += 1
                    
                else:
                    A[k] = R[j]
                    j += 1
                k += 1
                b = b+1
 
        # Checking if any element was left
            while i < len(L):
                A[k] = L[i]
                i += 1
                k += 1
                
 
            while j < len(R):
                A[k] = R[j]
                j += 1
                k += 1
 
    end = time.time() # End Timmer
    printf(end, start, b)
    
    
      

def printf(end, start, b):
    
    print(f"Runtime of the program is {end - start}")
    print ("Total Number of Swaps : ", b)
    

A = arraygenerator()

mergeSort(A)
print ("Sorted array", A)

您编写它的方式是让计时器对每个mergeSort函数调用进行调用。如果您想要程序的真实运行时间,请在调用mergeSort之前启动计时器,并检查函数调用期间的时间。

展开我的评论:由于您递归调用了
mergeSort
,因此需要使用另一个函数来包装它以测量开始和结束时间

然后,为了正确跟踪交换的数量,由于
mergeSort
在适当的位置对数组进行了变异,您可以使用
return
返回该调用(可能是内部递归的)
mergeSort
进行的交换数量:

import random
import time


def _merge_sort(A):
    swaps = 0
    if len(A) > 1:

        # Finding the mid of the array
        mid = len(A) // 2

        # Dividing the array elements
        L = A[:mid]

        # into 2 halves
        R = A[mid:]

        # Sorting the first half
        swaps += _merge_sort(L)

        # Sorting the second half
        swaps += _merge_sort(R)

        i = j = k = 0

        # Copy data to temp arrays L[] and R[]
        while i < len(L) and j < len(R):
            if L[i] < R[j]:
                A[k] = L[i]
                i += 1

            else:
                A[k] = R[j]
                j += 1
            k += 1
            swaps += 1

        # Checking if any element was left
        while i < len(L):
            A[k] = L[i]
            i += 1
            k += 1

        while j < len(R):
            A[k] = R[j]
            j += 1
            k += 1

    return swaps


def mergeSort(A):
    start = time.time()  # Start Timmer
    swaps = _merge_sort(A)
    end = time.time()  # End Timmer
    print(f"Runtime of the program is {end - start}")
    print("Total Number of Swaps : ", swaps)


A = [random.randint(0, 1000) for x in range(8)]
print("Unsorted array", A)
mergeSort(A)
print("Sorted array", A)
随机导入
导入时间
定义合并排序(A):
互换=0
如果len(A)>1:
#查找数组的中间部分
mid=len(A)//2
#分割数组元素
L=A[:中间]
#分成两半
R=A[mid:]
#上半场的排序
交换+=\u合并\u排序(L)
#下半场的排序
交换+=\u合并\u排序(R)
i=j=k=0
#将数据复制到临时数组L[]和R[]
而i
您正在递归调用
mergeSort
——每次递归调用都会计算自己的时间和交换次数。
import random
import time


def _merge_sort(A):
    swaps = 0
    if len(A) > 1:

        # Finding the mid of the array
        mid = len(A) // 2

        # Dividing the array elements
        L = A[:mid]

        # into 2 halves
        R = A[mid:]

        # Sorting the first half
        swaps += _merge_sort(L)

        # Sorting the second half
        swaps += _merge_sort(R)

        i = j = k = 0

        # Copy data to temp arrays L[] and R[]
        while i < len(L) and j < len(R):
            if L[i] < R[j]:
                A[k] = L[i]
                i += 1

            else:
                A[k] = R[j]
                j += 1
            k += 1
            swaps += 1

        # Checking if any element was left
        while i < len(L):
            A[k] = L[i]
            i += 1
            k += 1

        while j < len(R):
            A[k] = R[j]
            j += 1
            k += 1

    return swaps


def mergeSort(A):
    start = time.time()  # Start Timmer
    swaps = _merge_sort(A)
    end = time.time()  # End Timmer
    print(f"Runtime of the program is {end - start}")
    print("Total Number of Swaps : ", swaps)


A = [random.randint(0, 1000) for x in range(8)]
print("Unsorted array", A)
mergeSort(A)
print("Sorted array", A)