使用Python对众多字符串序列进行三种算法排序?

使用Python对众多字符串序列进行三种算法排序?

题目描述

使用Python对产生的众多字符串实现快速排序,归并排序和选择排序并计算时间

相关代码

# -*- coding: utf-8 -*-

import random

import string

import time

# 产生随机字符串

def stochastic():

str_listname = [random.choice(string.digits + string.ascii_letters) for _ in range(random.randint(3, 12))]

random_str = ""

random_str = random_str.join(str_listname)

random_str_abc = random_str.split()

return random_str_abc

data = []

# 产生众多字符串

def cycle():

for i in range(1, 100_001):

s = stochastic()[0]

data.append(s)

cycle()

# print(data)

def selection_sort(num_list):

import time

time1 = time.time()

length = len(num_list)

if length <= 1:

return num_list

for j in range(length):

min_num_index = j

for i in range(j + 1, length):

if num_list[i] < num_list[min_num_index]:

min_num_index = i

# 交换位置

num_list[min_num_index], num_list[j] = num_list[j], num_list[min_num_index]

time2 = time.time()

time = time2 - time1

print(time)

return num_list

def merge_sort(array):

if len(array) == 1:

return array

left_array = merge_sort(array[:len(array) // 2])

right_array = merge_sort(array[len(array) // 2:])

return merge(left_array, right_array)

def merge(left_array, right_array):

left_index, right_index, merge_array = 0, 0, list()

while left_index < len(left_array) and right_index < len(right_array):

if left_array[left_index] <= right_array[right_index]:

merge_array.append(left_array[left_index])

left_index += 1

else:

merge_array.append(right_array[right_index])

right_index += 1

merge_array = merge_array + left_array[left_index:] + right_array[right_index:]

return merge_array

def QuickSort(num):

if len(num) <= 1:

return num

key = num[0]

llist, rlist, mlist = [], [], [key]

for i in range(1, len(num)):

if num[i] > key:

rlist.append(num[i])

elif num[i] < key:

llist.append(num[i])

else:

mlist.append(num[i])

return QuickSort(llist) + mlist + QuickSort(rlist)

if __name__ == '__main__':

a = time.time()

selection_sort(data) # 选择排序

b = time.time()

c = b - a

print('选择耗时为%s' % c)

# print('-----------------------------------------------------------------------------------------------')

# # # print(sorted(data)) # 内置排序

print('-----------------------------------------------------------------------------------------------')

d = time.time()

merge_sort(data)

e = time.time()

f = e - d

print('归并耗时为%s' % f)

print('-----------------------------------------------------------------------------------------------')

g = time.time()

QuickSort(data)

h = time.time()

i = h - g

print('快速耗时为%s' % i)

你期待的结果是什么?实际看到的错误信息又是什么?

大佬们好,我自身感觉我的代码没有问题,但选择排序的时候运行不出来,我查了一下是内存的问题,我想问一下我应该如何优化选择排序部分的代码?


回答:

1.使用内置的 sorted() 函数进行排序,这样可以大大提升性能。
2.将循环条件改为 range(length - 1),因为在最后一次循环中,最小数已经在最后一个位置,不需要再进行比较。
3.在交换位置时,可以采用高级赋值符号 x, y = y, x。

def selection_sort(num_list):

length = len(num_list)

if length <= 1:

return num_list

for j in range(length - 1):

min_num_index = j

for i in range(j + 1, length):

if num_list[i] < num_list[min_

以上是 使用Python对众多字符串序列进行三种算法排序? 的全部内容, 来源链接: utcz.com/p/938687.html

回到顶部