使用最小值排序列表

时间:2013-11-09 03:33:42

标签: python list tuples

这就是我所做的,但它不起作用:

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]

6 个答案:

答案 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;
}