2015-07-28 56 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上使用搜索功能來查找有關這些算法的更多信息。

相關問題