选择排序
Selection Sorting
我有这段代码,它使用一个 txt 文件打印出国家列表。
def readCountries(filename):
result=[]
lines=open(filename)
for line in lines:
result.append(line.strip('\n').split(',\t'))
for sublist in result:
sublist[1]=float(sublist[1])
sublist[2]=int(sublist[2])
return result
我正在尝试创建一个选择排序,按人口降序对列表进行排序,并将打印信息。
这是我的代码我做错了什么?
def countryByPop(population):
myList=readCountries('countries.txt')
for i in range(0,len(myList)):
largest = i
for j in range(i,len(myList)):
if myList[j]<myList[smallest]:
smallest = j
temp = myList[i]
myList[i] = myList[smallest]
myList[smallest] = temp
if population range(0,len(myList))
return temp
else:
print "Invalid Parameter: %s" %(population)
你不会回来mylist
def countryByPop(population):
...
return mylist
你还需要清楚变量smallest
和largest
是什么意思。在使用之前,我没有看到 smallest
分配在哪里。
假设国家名称是记录中的第一个元素,您需要比较 myList[j][1] < myList[smallest][1]
例如如果人口是第二个元素
最后在Python中可以写这三行
temp = myList[i]
myList[i] = myList[smallest]
myList[smallest] = temp
作为一个
myList[i], myList[smallest] = myList[smallest], myList[i]
首先,您定义变量 largest
并且不再使用它。然后您使用未定义的变量 smallest
。我假设您打算将 smallest
的所有实例更改为 largest
,并且 largest
是列表中指向人口最多国家的索引。您应该将 smallest
的所有实例更改为 largest
.
要按降序排序,您需要在外部 for 循环的每次迭代中找到最大的项目,然后将其移至 myList[i]
。但是,通过测试 myList[j] < myList[smallest]
,您最终会将最小的元素移动到列表的开头。您应该将其更改为 >
而不是 <
。这样,内部 for 循环将找到人口比 largest
.
指向的国家更多的国家
此外,您的 if 语句实际上并未检查国家/地区人口。 myList 的每个元素都是一个列表。因此,您正在将列表与列表进行比较。相反,您想比较列表中的一个元素。如果列表的第三个元素存储人口,则该语句应显示为 myList[j][2] > myList[largest][2]
。请注意第二组大括号来访问该人口元素。
def countryByPop(population):
myList=readCountries('countries.txt')
for i in range(0,len(myList)):
largest = i
for j in range(i, len(myList)):
if myList[j][2] > myList[largest][2]:
largest = j
temp = myList[i]
myList[i] = myList[largest]
myList[largest] = temp
if population < len(myList):
return myList[population-1]
else:
print "Invalid Parameter: %s" % (population)
如果 population
参数旨在检索第 n 个人口最多的国家/地区,那么您可以通过 myList[population-1]
检索该项目。在 if 语句中使用 range()
是不必要的。代码反映了这一变化。您应该使用比 population
更好的名称来阐明意图,例如 country_rank
.
在jquery试试这个,很简单。
var Selectionsort = 函数 (A) {
for (var i = 0; i < A.length; i++) {
var imin = i;
for (var j = i + 1; j <= A.length; j++) {
if (A[j] < A[imin])
imin = j;
}
var tmp = A[i];
A[i] = A[imin];
A[imin] = tmp;
}
return A;
};
var A = [10, 20, 30, 40, 50, 60, 70, 80];
var Aftersorted = Selectionsort(A);
console.log(Aftersorted);
我有这段代码,它使用一个 txt 文件打印出国家列表。
def readCountries(filename):
result=[]
lines=open(filename)
for line in lines:
result.append(line.strip('\n').split(',\t'))
for sublist in result:
sublist[1]=float(sublist[1])
sublist[2]=int(sublist[2])
return result
我正在尝试创建一个选择排序,按人口降序对列表进行排序,并将打印信息。
这是我的代码我做错了什么?
def countryByPop(population):
myList=readCountries('countries.txt')
for i in range(0,len(myList)):
largest = i
for j in range(i,len(myList)):
if myList[j]<myList[smallest]:
smallest = j
temp = myList[i]
myList[i] = myList[smallest]
myList[smallest] = temp
if population range(0,len(myList))
return temp
else:
print "Invalid Parameter: %s" %(population)
你不会回来mylist
def countryByPop(population):
...
return mylist
你还需要清楚变量smallest
和largest
是什么意思。在使用之前,我没有看到 smallest
分配在哪里。
假设国家名称是记录中的第一个元素,您需要比较 myList[j][1] < myList[smallest][1]
例如如果人口是第二个元素
最后在Python中可以写这三行
temp = myList[i]
myList[i] = myList[smallest]
myList[smallest] = temp
作为一个
myList[i], myList[smallest] = myList[smallest], myList[i]
首先,您定义变量 largest
并且不再使用它。然后您使用未定义的变量 smallest
。我假设您打算将 smallest
的所有实例更改为 largest
,并且 largest
是列表中指向人口最多国家的索引。您应该将 smallest
的所有实例更改为 largest
.
要按降序排序,您需要在外部 for 循环的每次迭代中找到最大的项目,然后将其移至 myList[i]
。但是,通过测试 myList[j] < myList[smallest]
,您最终会将最小的元素移动到列表的开头。您应该将其更改为 >
而不是 <
。这样,内部 for 循环将找到人口比 largest
.
此外,您的 if 语句实际上并未检查国家/地区人口。 myList 的每个元素都是一个列表。因此,您正在将列表与列表进行比较。相反,您想比较列表中的一个元素。如果列表的第三个元素存储人口,则该语句应显示为 myList[j][2] > myList[largest][2]
。请注意第二组大括号来访问该人口元素。
def countryByPop(population):
myList=readCountries('countries.txt')
for i in range(0,len(myList)):
largest = i
for j in range(i, len(myList)):
if myList[j][2] > myList[largest][2]:
largest = j
temp = myList[i]
myList[i] = myList[largest]
myList[largest] = temp
if population < len(myList):
return myList[population-1]
else:
print "Invalid Parameter: %s" % (population)
如果 population
参数旨在检索第 n 个人口最多的国家/地区,那么您可以通过 myList[population-1]
检索该项目。在 if 语句中使用 range()
是不必要的。代码反映了这一变化。您应该使用比 population
更好的名称来阐明意图,例如 country_rank
.
在jquery试试这个,很简单。
var Selectionsort = 函数 (A) {
for (var i = 0; i < A.length; i++) {
var imin = i;
for (var j = i + 1; j <= A.length; j++) {
if (A[j] < A[imin])
imin = j;
}
var tmp = A[i];
A[i] = A[imin];
A[imin] = tmp;
}
return A;
};
var A = [10, 20, 30, 40, 50, 60, 70, 80];
var Aftersorted = Selectionsort(A);
console.log(Aftersorted);