我是Python的新手,我正在尝试使用bubblesort实现算法,但使用list comprenhension。虽然我使用if和for使用了list comprenhension,但是我无法找到实现嵌套for的方法,以及用于排序的swap。
以下是我尝试使用的代码。
import random as rn
l=[]
N=int(input('Give an integer: '))
for i in range(N):
l.append(rn.randint(1,100))
print(l)
listset = [l[:k-1] + [l[k]] + [l[k-1]] + l[k+1:] if l[k] > l[k-1] else l for k in range(1,len(l)) ]
print(listset)
对于如何正确使用列表解析以实现bubblesort算法,您有什么建议吗?
提前致谢。
答案 0 :(得分:0)
冒泡排序基本上是将最小的(升序)值冒泡到列表中的顶部,这是在时间O(n^2)
中实现的。
在列表理解的情况下,由于我们正在创建新列表,我不认为可以实现精确的就地数字交换冒泡排序算法。虽然通过从未排序列表n
次中拾取最小(升序)数字来创建新列表。最终它将创建类似的算法选择排序如下 -
def extractMin(numberList):
minValue = min(numberList)
numberList.remove(minValue)
return minValue
import random as rn
l=[]
N=int(input('Give an integer: '))
for i in range(N):
l.append(rn.randint(1,100))
print(l)
sorted_list = [extractMin(l) for k in range(len(l))]
print(sorted_list)
函数extractMin(..)
的时间复杂度为O(n)
,被称为n
次,因此整个排序的时间复杂度为O(n^2)
。
答案 1 :(得分:-1)
这是一个纯粹使用列表理解进行排序的解决方案。
$mids = explode("\n", $_POST['invoiceCheck']);
$noErrors = []; //array to store items that don't generate an error
// ----- loop through all items and print any errors -----
foreach ($mids as $mid){
if(!empty($mid)) {
//Check for errors using mysqli
if(error) {
//display error
echo $errorMsg //replace this with your error message
} else {
//add value to array to display later
$noErrors[] = $mid;
}
}
}
// ----- print any items that didn't generate an error -----
foreach ($noErrors as $item) {
//display each non-error item
echo $item;
}
输出:
import itertools
s = [5, 6, 2, 4, 5, 6, 7]
new_s = s[:]
temp1 = 0
final_data = [[globals().update(temp1=s[b]), globals().update(s=s[:b]+[temp1]+s[b+1:]), globals().update(s= s[:b]+[s[b+1]]+s[b+1:])] for i in range(len(s)) for b in range(len(s)-1) if s[b+1] < s[b]]
new_final_list = list(itertools.chain.from_iterable([[a]*new_s.count(a) for a, b in itertools.groupby(s)]))