python實現的幾種排序演算法

2021-08-04 17:09:11 字數 3104 閱讀 2607

'''

此演算法為插入排序中的

直接插入排序

當然這是對於n很小的情況,但是當n很大的時候,可以用折半插入

就是對於直接插入排序的乙個改進,對於前乙個序列用直接插入排序

後面就不用這樣了,因為前面已經是乙個有序序列,可以折半方式提高

查詢效率

'''a=

b=none

#插入列表

insert_list=[7,3,5,67,3,6,8]

#插入的數

#擴充套件列表

n=none

def expand_list():

# for i in range(1,join_nuber):

#得到要插入的資料

def insert_number(insert_list):

return insert_list.pop()

#得到插入的位置

def position(n):

min=n

i=0while true:

if( i<(len(a)-1) and min<=a[i]):

j=ireturn j

i=i+1

if(i==(len(a)-1)):

return len(a)-1

#資料插入

def insert(a,insert_list):

while (len(insert_list)!=0):

n=insert_number(insert_list)

print("this moment the value of n",n)

print("a",a)

if (len(a)==0):

expand_list()

a[0]=n

else:

expand_list()

print("a",a)

print("len a",len(a))

print("position",position(n))

for i in range(0,len(a)-position(n)-1):

a[len(a)-1-i]=a[len(a)-2-i]

a[position(n)]=n

insert(a,insert_list)

print(a)#測試**

#選擇排序

'''選擇排序就是每一次找出最小的那個數

然後和第乙個數交換位置

'''# a=[3,4,8,6,3,4,5]

# def select_sort(lists):

#     # 選擇排序

#     count = len(lists)

#     for i in range(0, count):

#         min = i

#         for j in range(i + 1, count):

#             if lists[min] > lists[j]:

#                 min = j

#         #在python中不需要三方引數來實現兩個數的交換

#         lists[min], lists[i] = lists[i], lists[min]

#     return lists

'''起泡排序,通過兩兩比較

每次找出最大的放在末尾

'''# def bubble_sort(lists):

#     # 氣泡排序

#     count = len(lists)

#     for i in range(0, count):

#         for j in range(i + 1, count):

#             if lists[i] > lists[j]:

#                 lists[i], lists[j] = lists[j], lists[i]

#     return lists

#堆排序

'''堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個節點的值都不大於其父節點的值

堆排序通過每次找出堆頂元素,來實現排序

'''

a=[3,20,9,6]

def adjust_heap(lists, i, size):

lchild = 2 * i + 1

rchild = 2 * i + 2

max = i

print("adjust_heap")

if i < size / 2:

if lchild < size and lists[lchild] > lists[max]:

max = lchild

if rchild < size and lists[rchild] > lists[max]:

max = rchild

if max != i:

lists[max], lists[i] = lists[i], lists[max]

print(lists)

adjust_heap(lists, max, size)

def build_heap(lists, size):

for i in range(0, int(size/2))[::-1]:#此處**的[::-1]的意思就是從高到低迴圈,i的值是從最大開始取

adjust_heap(lists, i, size)

def heap_sort(lists):

size = len(lists)

build_heap(lists, size)

for i in range(0, size)[::-1]:

lists[0],lists[i]=lists[i],lists[0] #此**的作用是將第乙個(即堆頂元素放到最後面,)剩下的元素再進行堆排序

#直到取出所有堆頂元素,就完成了排序

adjust_heap(lists, 0, i)

heap_sort(a)

print(a)

#測試**

到此也差不多了,希望同學們能好好理解一下堆排序,不要覺得難就放棄。生活亦是如此。

python排序演算法的幾種實現

1 氣泡排序 def bubble sort arr n len arr for i in range n for j in range n i 1 if arr j arr j 1 arr j arr j 1 arr j 1 arr j return arr a 1,4,7,3,2,24,33 s...

Python實現幾種簡單的排序演算法

概念 為乙個無序的列表排成有序的 實現過程描述 公升序 1.比較相鄰的元素,如果第乙個比第二個大,就交換他們的位置 2.對每一對相鄰元素重複1的工作,從開始第一隊到最後一對,最後結束的時候最大的數會在後面 3.針對所有元素重複1,2的工作,除了最後乙個數,因為最後的數最大,省略這個過程 4.持續每次...

基於python的幾種排序演算法的實現

usr bin python3 coding utf 8 time 2019 3 28 10 26 author yosef 夜雨聲煩 email wurz529 foxmail.com file sort.py software pycharm defbubble sort arr 氣泡排序 pa...