2015-07-28 35 views
-1

我已经用Python创建了一个代码,任何人都可以向我展示排序随机数的算法,而不使用sort()不使用任何排序功能对随机数进行排序

import random 

firstNum=1 
lastNum=30 

range=xrange(firstNum,(lastNum)) 

count=20 

print"Random numbers generated:" 

numberlist=random.sample(range,count) 
print "Before" , numberlist 
print('') 
numberlist.sort() 
print "After" ,numberlist 
print('') 
+0

那么你的代码有什么问题? – Kasramvd

+1

你为什么要“不使用sort”排序?要理解它背后的算法,以避免错误的功能? – Jiby

+0

@Jiby - 这通常是面试风格的问题......在这种情况下不太确定。但你有一个非常有效的问题在您的评论... – Lix

回答

2

当然,只要使用sorted

import random 

firstNum = 1 
lastNum = 30 

range = xrange(firstNum, lastNum) 

count = 20 

print "Random numbers generated:" 

numberlist = random.sample(range, count) 
print "Before", numberlist 
print('') 
numberlist = sorted(numberlist) 
print "After", numberlist 
print('') 
+2

我很肯定这里的重点不是使用任何排序功能......但是......嘿......细节:P – Lix

+0

@Lix ya,没有任何排序功能。 –

+0

@ rightfold谢谢你帮助我,但我需要排序的随机数没有任何排序功能。 –

1

你可以这样做不同类型的排序技术。这种技术称为Bubble Sort和复杂度为O(n^2)

def bubbleSort(a): 
    update=True 
    while(update): 
     update = False 
     for i in range(len(a)-1): 
      if a[i]>a[i+1]: 
       a[i],a[i+1]=a[i+1],a[i] 
       update = True 
    return a 

您还可以通过快速排序的技术使用复杂O(nlogn)。详细说明在这里Quick Sort

def quickSort(alist): 
    quickSortHelper(alist,0,len(alist)-1) 

def quickSortHelper(alist,first,last): 
    if first<last: 

     splitpoint = partition(alist,first,last) 

     quickSortHelper(alist,first,splitpoint-1) 
     quickSortHelper(alist,splitpoint+1,last) 


def partition(alist,first,last): 
    pivotvalue = alist[first] 

    leftmark = first+1 
    rightmark = last 

    done = False 
    while not done: 

     while leftmark <= rightmark and \ 
       alist[leftmark] <= pivotvalue: 
      leftmark = leftmark + 1 

     while alist[rightmark] >= pivotvalue and \ 
       rightmark >= leftmark: 
      rightmark = rightmark -1 

     if rightmark < leftmark: 
      done = True 
     else: 
      temp = alist[leftmark] 
      alist[leftmark] = alist[rightmark] 
      alist[rightmark] = temp 

    temp = alist[first] 
    alist[first] = alist[rightmark] 
    alist[rightmark] = temp 


    return rightmark 

alist = [54,26,93,17,77,31,44,55,20] 
quickSort(alist) 
print(alist) 
+0

谢谢你的代码,但你可以给我一些简单的解释,我明白这一点。 –

+0

@Ellos赖这是一个众所周知的排序技术。请点击此链接。我想你明白。如果你不明白的话,我会解释https://en.wikipedia.org/wiki/Bubble_sort –

+0

我试图用bubbersort随机数进行排序,但它不工作 –

0

有各种不同的排序实现。他们的区别在于他们的空间和时间复杂性和他们的副作用。

这个问题太笼统了,不能给出很好的具体答案,但我们可以给你一些指导。

考虑寻找到:

  • 冒泡排序
  • 合并排序
  • 插入排序
  • 快速排序
  • 堆排序

考虑在此link考虑看看,这给了bas很好的介绍ic python排序算法或在Stack Overflow上使用搜索功能来查找有关这些算法的更多信息。

相关问题