(可能是)自創的下標排序法

2021-10-06 13:51:18 字數 1552 閱讀 8699

今天學習演算法中各類排序法,發現時間複雜度基本上都是o(n**2)

突發奇想到乙個比較浪費空間但省時間的排序演算法,其實也不知道意義何在,但記錄一下博君一笑

**如下:

#!/usr/bin/env python      

# -*- coding: utf-8 -*-

#需要排序的a列表

alist =

[433

,198

,389

,456

,216,21

,133

,495

,262

,249

,208

,471

,402

,425

,156

,496

,245

,184

,299

,457

]max_num = alist[0]

# 建立乙個不可能值,即需要排序的列表中不可能存在的值,用於初始化b列表

# 由於alist我是用randint生成的,所以暫且將該值設為0

impossablenum =

0#儲存最終結果的c列表

clist =

# 取a列表中最大值max

for i in

range

(len

(alist)):

# 時間複雜度n

if max_num < alist[i]

: max_num = alist[i]

# 生成max_num大小的空列表,和max_num大小的"重複"列表

blist =

[impossablenum for i in

range

(max_num +1)

]times =[0

for i in

range

(max_num +1)

]# 用來記錄某乙個值的重複次數,個人認為還能優化,但太懶了

# 將a列表中的每個值放到b列表中,以該值為下標的位置,若重複則times列表記錄重複次數

# 此時b列表中元素已完成排序,但還需精簡和重複值的新增

for i in

range

(len

(alist)):

# 時間複雜度n

n = alist[i]

if blist[n]

== impossablenum:

blist[n]

= n else

: times[n]+=1

# 將b列表中的有用資料按順序放到c列表,並將重複值按照次數新增

for i in

range

(max_num +1)

:# 時間複雜度未知,假設為m

if blist[i]

!= impossablenum:

while times[i]

>=0:

) times[i]-=1

print

(clist)

差異可能是重要的

3位可儲存8個值。n位可儲存2 n值。因為乙個位元組的8位,乙個位元組可以存放2 8 256 的值。變數的大小對大量的資訊可以儲存 這是更大的變數可以容納更多的限制。我們將進一步解決這個問題的時候,我們進入不同型別的變數。第二,電腦有乙個有限的可用記憶體。每一次我們宣告乙個變數,那游離的記憶是只要用...

你可能是自由的

序 一直都愛吃甜,甜到微微的澀。一直都想寫作,寫到天昏地暗。一直追逐自由,飛到天涯海角。孤獨的牧羊人在廣廖的草原牧著他的羊兒們,一生孤獨的他在3歲那年,父母已離開人世,剩下相依為命的奶奶也在10歲時離他而去,留下的只有兩頭羊兒。那一年,他哭的是那麼傷心,周圍嬉皮笑臉的人帶著乙個悲傷的面具,假惺惺的來...

這可能是不可取的!

雖然消極期望功能的一部分,我們給它乙個整數而不是。然而,由於分數具有建構函式的願意接受乙個整數,編譯器將使用此建構函式隱式轉換為整數6轉化為分數的物件,然後將其複製到makenegative 初始化引數f.因此,上面的程式列印 6 1 這種隱式轉換為各種初始化 直接 統一和複製 用於隱式會話的建構函...