这就是我所做的,但它不起作用:
def min_sorted(xs):
copy_list= xs
list=[]
while copy_list:
minimum=copy_list[0]
for i in copy_list:
if i < minimum:
minimum = i
if not i == minimum:
list.append(minimum)
print (list)
这就是我所做的,但它没有这样的工作可以请一些人来检查一下吗?
ex: xs = [7, 8, 3, 1, 5]
min_sorted([7, 8, 3, 1, 5]) ====> [1, 3, 5, 7, 8]
xs ====>[7, 8, 3, 1, 5]
答案 0 :(得分:3)
由于您希望按最小值排序,因此使用专为此作业设计的内置sorted
方法更好,而不是您自己的自定义版本:强>
xs = [7, 8, 3, 1, 5]
def sort_list(lst):
return sorted(lst)
print sort_list(xs)
输出:
[1, 3, 5, 7, 8]
这样,它也可以保持原始列表不受影响。
注:
根据@Ramchandra Apte:
注意sorted()在Python 3中返回一个迭代器,所以如果你迭代 在那个迭代器上,它将被完成,没有更多的值可以 由迭代器生成。所以你可能想传递输出 sorted()到list()。
答案 1 :(得分:2)
def min_sort(xs):
oxs = []
txs = list(xs)
while txs:
midx = 0
for i, x in enumerate(txs[1:]):
if x < txs[midx]:
midx = i+1
oxs.append(txs.pop(midx))
return oxs
答案 2 :(得分:2)
根据您的问题历史记录,这看起来像是一个家庭作业问题。我假设你不能像jrd1建议的那样使用sorted
。如果可以,请务必使用sorted
。
Selection Sort听起来像你想要的。
答案 3 :(得分:1)
你实际上可以这样做:
xs = [7, 8, 3, 1, 5]
sorted_mintomax = sorted(xs)
答案 4 :(得分:0)
bubblesort将最小值推送到前面,同时向后遍历内部循环中的列表并在外部循环中向前迭代。
def min_sorted(xs):
xsort = []
for x in xs:
xsort.append(x)
i = 0
while i < len(xsort)-1:
for j in range(len(xsort)-1, i, -1):
if xsort[j] < xsort[j-1]:
y = xsort[j-1]
xsort[j-1] = xsort[j]
xsort[j] = y
i = i + 1
return xsort
xs = [7,8,3,1,5]
sorted = min_sorted(xs)
print(xs)
print(sorted)
OUTPUT:
[7, 8, 3, 1, 5, 9]
[1, 3, 5, 7, 8, 9]
答案 5 :(得分:0)
这是在C中实现的解决方案,使用称为按最小值排序的模式。这非常复杂,难以理解,但让我们尝试一下!
// 9. SORTING BY MINIMUM VALUES
#include <stdio.h>
#define NUMBER 25 //SIZE OF THE ARRAY
int main() {
int array[] = {56, 32, 45, 67, 723, 9, 7, 12, 545, 45, 1, 76, 345, 311, 6, 734, 87, 456, 325, 786, 34, 6, 5, 987, 3};
for (int i = 0; i < NUMBER - 1; ++i) {
int index = i;
int value = array[i];
for (int j = i + 1; j < NUMBER; ++j) {
if (value > array[j]) {
value = array[j];
index = j;
}
}
array[index] = array[i];
array[i] = value;
}
for (int k = 0; k < NUMBER; k++) {
printf("%d ", array[k]);
}
return 0;
}