0

这就是我所做的,但没有奏效:

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]
4

6 回答 6

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:

请注意,在 Python 3 中 sorted() 返回一个迭代器,因此如果您迭代该迭代器,它将完成并且无法从该迭代器生成更多值。因此,您可能希望将 sorted() 的输出传递给 list()。

于 2013-11-09T03:43:12.263 回答
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
于 2013-11-09T03:53:39.593 回答
2

根据您的问题历史,这看起来像是一个家庭作业问题。sorted正如 jrd1 所建议的那样,我假设您不允许使用。如果可以的话,一定要sorted改用。

选择排序听起来像你想要的。

于 2013-11-09T03:59:13.097 回答
1

你实际上可以这样做:

xs = [7, 8, 3, 1, 5]
sorted_mintomax = sorted(xs)
于 2013-11-09T03:47:34.023 回答
0

冒泡排序将最小值推到前面,同时在内循环中向后迭代列表并在外循环中向前迭代。

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]
于 2013-11-09T04:10:12.513 回答
-1

这是用 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;
}
于 2019-10-31T15:17:50.587 回答