首页 > 解决方案 > 如何在没有任何排序功能的情况下按字母顺序对字符串数组进行排序?Python

问题描述

解决以下问题时:“假设您有一个随机的字符串列表(例如:a、b、c、d、e、f、g),请编写一个程序,该程序将按字母顺序对字符串进行排序。您可能不会使用排序命令。”

我遇到了通过以下代码运行字符串的问题,这有时会让我在最终列表中出现重复的字符串

我对 python 还很陌生,我们的班级刚刚开始研究 numpy 和该模块中的函数,我不确定代码中是否使用了任何函数(任何排序函数除外)。

import numpy as np

list=[]
list=str(input("Enter list of string(s): "))
list=list.split()
print() # for format space purposes
listPop=list
min=listPop[0]
newFinalList=[]

if(len(list2)!=1):
    while(len(listPop)>=1):
        for i in range(len(listPop)):
            #setting min=first element of list
            min=listPop[0]
            if(listPop[i]<=min):
                min=listPop[i]
                print(min)    
        listPop.pop(i)
        newFinalList.append(min)
    print(newFinalList)
else:
    print("Only one string inputted, so already alphabatized:",list2)

["a","y","z"] 的预期结果

["a","y","z"]

实际结果...

输入字符串列表:ayz

a a a ['a', 'a', 'a']

输入字符串列表:dec

d c d d ['c', 'd', 'd']

标签: pythonarraysstringlistnumpy

解决方案


您可以实现快速排序:

def partition(arr,low,high): 
    i = ( low-1 )        
    pivot = arr[high]
    for j in range(low , high):     
        if arr[j] <= pivot:         
            i = i+1
            arr[i],arr[j] = arr[j],arr[i]
    arr[i+1],arr[high] = arr[high],arr[i+1] 
    return ( i+1 ) 

def quickSort(arr,low,high): 
    if low < high:      
        pi = partition(arr,low,high)        
        quickSort(arr, low, pi-1) 
        quickSort(arr, pi+1, high) 

arr = ['a', 'x', 'p', 'o', 'm', 'w'] 
n = len(arr) 
quickSort(arr,0,n-1) 
print ("Sorted list is:") 
for i in range(n): 
    print ("%s" %arr[i]),

输出:

Sorted array is:
a m o p w x

推荐阅读