日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python内置排序算法_2021-01-05 排序算法(Python语言实现)

發(fā)布時(shí)間:2025/3/21 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python内置排序算法_2021-01-05 排序算法(Python语言实现) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.二分查找

def binary_search(li,val):

left = 0

right = len(li) - 1

while left <= right: #候選區(qū)有值

mid = (left + right) // 2

if li[mid] == val:

return mid

elif li[mid] > val: #待查找值在mid左側(cè)

right = mid - 1

else: #li[mid] < val 待查找值在mid右側(cè)

left = mid + 1

else:

return None

the_list = [1,3,5,7,9]

print(binary_search(the_list,7))`

2.冒泡排序

import random

def bubble_sort(li):

for i in range(len(li)-1): #第i趟

exchange = False

for j in range(len(li)-i-1):

if li[j] > li[j+1]:

li[j],li[j+1] = li[j+1],li[j]

exchange = True

if not exchange:

return

def bubble_reverse_sort(li):

for i in range(len(li)-1): #第i趟

exchange = False

for j in range(len(li)-i-1):

if li[j] < li[j+1]:

li[j],li[j+1] = li[j+1],li[j]

exchange = True

if not exchange:

return

the_list = [random.randint(0,100) for i in range(10)]

print(the_list)

bubble_sort(the_list)

print(the_list)

bubble_reverse_sort(the_list)

print(the_list)

3.選擇排序

def select_sort_simple(li):

li_new = []

for i in range(len(li)):

min_val = min(li)

li_new.append(min_val)

li.remove(min_val)

return li_new

def select_sort(li):

for i in range(len(li)-1): #i是第幾趟

min_loc = i

for j in range(i+1,len(li)):

if li[j] < li[min_loc]:

min_loc = j

li[i],li[min_loc] = li[min_loc],li[i]

return li

li = [3,2,4,1,5,6,8,7,9]

print(select_sort(li))

4.插入排序

def insert_sort(li):

for i in range(1,len(li)): #i表示摸到的牌的下標(biāo)

tmp = li[i]

j = i - 1 #j指的是手里的牌的下標(biāo)

while j >= 0 and li[j] > tmp:

li[j+1] = li[j]

j -= 1

li[j+1] = tmp

print(li)

li =[3,2,4,1,5,7,9,6,8]

insert_sort(li)

print(li)

5.快速排序

def partition(li,left,right):

tmp = li[left]

while left < right:

while left = tmp: #從右邊找比tmp小的數(shù)

right -= 1 #往左走一步

li[left] = li[right] #把右邊的值移到左邊空位

while left < right and li[left] <= tmp:

left += 1

li[right] = li[left] #把左邊的值移到右邊空位上

li[left] = tmp #把tmp歸位

return left

def quick_sort(li,left,right):

if left < right: #至少兩個(gè)元素

mid = partition(li,left,right)

quick_sort(li,left,mid-1)

quick_sort(li,mid+1,right)

li = [5,7,4,6,3,1,2,9,8]

quick_sort(li,0,len(li)-1)

print(li)

6.堆排序

def sift(li,low,high):

"""

li:列表

low:堆的根節(jié)點(diǎn)位置

high:堆的最后一個(gè)元素的位置

"""

i = low #i開始指向根節(jié)點(diǎn)

j = 2*i+1 #j開始是左孩子

tmp = li[low] #把堆頂存起來

while j <= high: #只要j位置有數(shù)

if j + 1 <= high and li[j+1] > li[j]: #如果右孩子有并且比較大

j = j + 1 #j指向右孩子

if li[j] > tmp:

li[i] = li[j]

i = j #往下看一層

j = 2*i+1

else: #tmp更大,把tmp放到i的位置上

li[i] = tmp

break

else:

li[i] = tmp #把tmp放到葉子節(jié)點(diǎn)上

def heap_sort(li):

n = len(li)

for i in range((n-2)//2,-1,-1):

#i表示建堆的時(shí)候調(diào)整的部分的根的下標(biāo)

sift(li,i,n-1)

#建堆完成了

for i in range(n-1,-1,-1):

#i指向當(dāng)前堆的最后一個(gè)元素

li[0],li[i] = li[i],li[0]

sift(li,0,i-1) #i-1是新的high

li = [i for i in range(100)]

import random

random.shuffle(li)

print(li)

heap_sort(li)

print(li)

Python堆排序內(nèi)置模塊

import heapq

import random

li = list(range(100))

random.shuffle(li)

print(li)

heapq.heapify(li) #建堆

n = len(li)

for i in range(n):

print(heapq.heappop(li),end=',')

總結(jié)

以上是生活随笔為你收集整理的python内置排序算法_2021-01-05 排序算法(Python语言实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。