排序演算法 珠排序(不實用方法)

2021-10-07 04:25:35 字數 2445 閱讀 7371

這是學排序演算法時候意外的查到的方法,對應現實中的算盤?現實中操作很快,操作能同時進行;但是計算機中需要時間,如果並行可以但是吃硬體。

將每個數看成n個珠子(不能用於小數,如果有負數也麻煩,0也頭疼),把珠子按順序插在杆上,杆的數量等於最大的數,讓它們下落。

所以需要 [max][max] 的陣列用於表示數,假設每個數對應一行,排序時把每一列往底下歸。時間複雜度 o(n),空間複雜度 o(n^2)。

直接放 wikipedia 的演示圖:

演算法本身不太實用,我就寫了一下基本方法,展示思路,**質量不高,因為用的二維陣列沒簡化所以複雜度 o(n^3) 了。

#include

#include

using std::max_element, std::cout, std::endl;

void

insertbead

(bool

* row,

int value)

;int

*beadsort

(int

* num,

short len)

;int

getnum

(bool

* row,

int max)

;int

main

(int argc,

const

char

* ar**)

;short len =

sizeof

(num)

/sizeof

(int);

int* after =

beadsort

(num, len)

;for

(short i =

0; i < len; i++

)printf

("%d "

, after[i]);

return0;

}int

*beadsort

(int

* num,

short len)

for(

short i =

0; i < len; i++

) num[i]

=getnum

(beadmap[i]

, max)

;return num;

}// 將每個數插入杆

void

insertbead

(bool

* row,

int value)

// 下落後的每行計數

intgetnum

(bool

* row,

int max)

懶得再寫 py 的,直接 copy 過來放著…沒驗證對不對,看看就好。

def

bead_sort

(l):

b =l_len =

len(l)-1

index =

0 count =

0while

(any

(l))

:if l[index]!=0

: count +=

1 l[index]-=1

if index == l_len:

index =

0 count =

0else

: index +=

1if count !=0:

result =

for i, v in

enumerate

(b[:-1

]):if v == b[i+1]

:continue

else

: result.extend(

[i +

1for _ in

range

(v - b[i +1]

)])

result.extend(

[len

(b)for _ in

range

(max

(b)-

len(result))]

)return result

if __name__ ==

"__main__"

:print

(bead_sort([2

,4,1

,3,3]))

這種演算法必然用到 n*n 陣列,雖然複雜度是 n 但是肯定比正常方法慢。

實用的排序演算法

選擇排序的有序化是從第頭開始有序化的。如 n個元素 從小向大排序 第乙個和後面n 1個元素一一比較 如果發現後面元素的比他小 交換他們兩 一輪下去就可以保證第乙個元素是最小的 後面從第二個元素開始往後面比較 重複以上步驟直到倒數第二個數字 public class xuanze for int i ...

實用排序演算法整理 Python

def bubble sort nums n 2 1 n len nums for i in range n for j in range n 2,i 1,1 if nums j nums j 1 nums j nums j 1 nums j 1 nums j return nums def sho...

簡單實用演算法 氣泡排序

變數定義 注 氣泡排序如果能在內部迴圈第一次執行時,使用乙個bool值來表示有無需要交換的可能,也有可能把最好的複雜度降低到o n 在這個情況,在已經排序好的數列就無交換的需要。演算法 c 氣泡排序 public void bubblesort intnums if exchange 本趟排序未發生...