2011-11-03 120 views
0

我正在尝试编写和优化冒泡排序,但我的代码实际上并没有通过列表排序。关于为什么它提前停止的任何建议?冒泡排序错误

#!/usr/bin/env python 

from random import * 
import time 

def bubble(lst): 
    counter = 0 
    n = len(lst) 
    while n > 0: 
     temp = 0 
     for i in range(1, n - 1): 
      if lst[i] > lst[i + 1]: 
       lst[i], lst[i + 1] = lst[i + 1], lst[i] # swap 
       temp = i 
       counter += 1 # to compare the speed to the 
          # unoptimized bubble sort 
      n = temp 
    return counter 

def main(): 
    lst = range(10) 
    shuffle(lst) 
    print lst 
    start = time.time() 
    counter = bubble(lst) 
    print lst 
    end = time.time() 
    print counter 
    print "time", end - start 

main() 
+2

这是家庭作业? – crashmstr

+0

用于python中的气泡排序的[google搜索](http://www.google.com.ph/search?q=bubble+sort+python)就足够了:-) – OnesimusUnbound

回答

0

这应该修复它:

def bubble(lst): 
    counter = 0 
    n = len(lst) 
    while n > 0: 
      temp = 0 
      for i in range(0,n-1): # <- first element is at position 0 
        if lst[i] > lst[i+1]: 
          lst[i],lst[i+1] = lst[i+1],lst[i] #swap 
          temp = i+1 # <- the last swapped position 
          counter += 1 
      n = temp 
    return counter