3

这不是基于效率,并且必须仅使用非常非常基本的 python 知识(字符串、元组、列表基础)来完成,因此无需导入函数或使用排序/排序。(这是使用 Python 2.7.3)。

例如我有一个列表:

unsort_list = ["B", "D", "A", "E", "C"]
sort_list = []

sort_list 需要能够打印出来:

"A, B, C, D, E"

我可以用数字/整数来做,字母顺序字符串有类似的方法吗?如果不是,你会推荐什么(即使它效率不高。)没有导入或排序功能。

4

11 回答 11

2

这是Python 中快速排序算法一个非常简短的实现:

def quicksort(lst):
    if not lst:
        return []
    return (quicksort([x for x in lst[1:] if x <  lst[0]])
            + [lst[0]] +
            quicksort([x for x in lst[1:] if x >= lst[0]]))

这是一个玩具实现,易于理解,但效率太低,无法在实践中使用。它更多地是作为一个学术练习来展示如何以函数式编程风格简洁地编写排序问题的解决方案。它适用于可比较对象的列表,特别是对于问题中的示例:

unsort_list = ['B', 'D', 'A', 'E', 'C']
sort_list   = quicksort(unsort_list)

sort_list
> ['A', 'B', 'C', 'D', 'E']
于 2012-10-27T15:37:25.800 回答
1

只是为了好玩:

from random import shuffle
unsorted_list = ["B", "D", "A", "E", "C"]

def is_sorted(iterable):
  for a1,a2 in zip(iterable, iterable[1:]):
     if a1 > a2: return False
  return True

sorted_list = unsorted_list
while True:
   shuffle(sorted_list)
   if is_sorted(sorted_list): break

平均复杂度应该是阶乘,最坏情况是无限的

于 2012-10-27T16:19:48.833 回答
1

Python 已经知道哪个字符串是第一个,哪个是下一个,这取决于它们的 ASCII 值

例如:

"A"<"B"
 True

所以我们可以编写一个简单的冒泡排序算法来对字符串列表进行排序

unsort_list = ["B", "D", "A", "E", "C"]
def sortalfa(unsort_list):
    for i in range(len(unsort_list)-1):
        for j in range(i+1,len(unsort_list)):
            if unsort_list[i]>unsort_list[j]:
                temp = unsort_list[i]
                unsort_list[i] = unsort_list[j]
                unsort_list[j] = temp
    print("sorted list:{}".format(unsort_list))

sortalfa(["B", "D", "A", "E", "C"])

结果:

sorted list:['A', 'B', 'C', 'D', 'E']

有许多可用的标准库可以使用单行代码完成。

于 2018-12-26T08:30:35.240 回答
0

更简单:

dc = { }
for a in unsorted_list:
  dc[a] = '1'

sorted_list = dc.keys()
于 2012-10-27T15:48:01.243 回答
0
u = ["B", "D", "A", "E", "C"]
y=[]
count=65
while len(y)<len(u):
    for i in u:
        if ord(i)==count:
            y.append(i)
            count+=1
print(y)
于 2012-10-27T16:26:43.873 回答
0

这仅使用min()内置和list对象方法:

unsort_list = ["B", "D", "A", "E", "C"]
sort_list = []

while unsort_list:
    smallest = min(unsort_list)
    sort_list.append(smallest)
    unsort_list.pop(unsort_list.index(smallest))

print sort_list

它会破坏未排序的列表,因此您可能需要复制它并使用它。

于 2012-10-27T20:40:58.427 回答
0

list_val=['c','d','e','a','r']

for passnum in range(len(list_val)-1, 0, -1):
  for i in range(passnum):
    if list_val[i] > list_val[i+1]:
      list_val[i], list_val[i+1] = list_val[i+1], list_val[i]

打印 list_val

于 2016-09-09T20:02:32.340 回答
0

more_itertools库有一个合并排序算法的实现,称为collate.

import more_itertools as mit

iterables = ["B", "D", "A", "E", "C"]
list(mit.collate(*iterables))
# ['A', 'B', 'C', 'D', 'E']
于 2017-08-23T05:35:13.157 回答
0

我已经尝试过这样的事情,但我不确定程序的时间复杂度。

l=['a','c','b','f','e','z','s']
l1=[]
while l:
    min=l[0]
    for i in l:
        # here **ord** means we get the ascii value of particular character.
        if ord(min)>ord(i):
            min=i
     l1.append(min)
     l.remove(min)
print(l1)
于 2019-01-25T17:05:58.583 回答
0
def quicksort(lst):
    if not lst:
        return []
    return (quicksort([x for x in lst[1:] if x <  lst[0]])
            + [lst[0]] +
            quicksort([x for x in lst[1:] if x >= lst[0]]))
unsort_list = ['B', 'D', 'A', 'E', 'C']
sort_list   = quicksort(unsort_list)

排序列表

['A','B','C','D','E']

于 2020-01-11T03:37:22.520 回答
-1
u = ["B", "D", "A", "F", "C"]

y=[]

count=65

while len(y)<len(u):

    for i in u:

        if ord(i)==count:

            y.append(i)

    count+=1

print(y)
于 2020-07-06T08:13:04.737 回答