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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

python

python集合排序_排序算法集合

發(fā)布時(shí)間:2025/4/16 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python集合排序_排序算法集合 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#### 冒泡排序

### 時(shí)間復(fù)雜度是: O(n^2)

### 空間復(fù)雜度是: O(1)

def BubbleSort(li):

for i in range(len(li)): # i = 0

flag = True

for j in range(len(li) - i - 1): ### j = 0, j = 1, j =2

if li[j] > li[j+1]: ### li[0]=1 > li[1]=2 | li[1]=2 > li[2]=3 | li[2] > li[3]

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

flag = False

if flag:

return None

#### 選擇排序

### 時(shí)間復(fù)雜度是:O(n^2)

### 空間復(fù)雜度是:O(1)

def SelectSort(li):

for i in range(len(li)):

minLoc = i

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

if li[j] < li[minLoc]:

li[j], li[minLoc] = li[minLoc], li[j]

#### 插入排序

#### 時(shí)間復(fù)雜度:O(n^2)

#### 空間復(fù)雜度;O(1)

def InsertSort(li):

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

tmp = li[i] ## i=2, tmp = 4

j = i - 1 ### j = 1

while j >= 0 and li[j] > tmp: ### li[1] = 7 > tmp = 4 | li[0]=5 > tmp=4

li[j+1] = li[j] ### j = 1

j = j - 1 ### j = 0 | j = -1

li[j + 1] = tmp ### li[0] = tmp = 4

#### 快速排序

#### 時(shí)間復(fù)雜度:O(nlogn)

def partition(li, left, right):

tmp = li[left]

while left < right:

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

right = right - 1

li[left] = li[right]

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

left = left + 1

li[right] = li[left]

li[left] = tmp

return left

def Quick_Sort(li, left, right):

if left < right:

mid = partition(li, left, right) ### O(n)

Quick_Sort(li, left, mid-1) #### O(logn)

Quick_Sort(li, mid+1,right)

### 歸并排序

### 時(shí)間復(fù)雜度:O(nlogn)

### 空間復(fù)雜度:O(n)

#### python 底層 sorted()函數(shù), 采用的排序算法是 TimSorted 包含了歸并排序和插入排序

#### TimSorted 的時(shí)間復(fù)雜度是:O(nlogn)

def merge(li, low, mid, high):

i = low

j = mid + 1

ltmp = []

while i <= mid and j <= high:

if li[i] <= li[j]:

ltmp.append(li[i])

i += 1

else:

ltmp.append(li[j])

j += 1

while i <= mid:

ltmp.append(li[i])

i += 1

while j <= high:

ltmp.append(li[j])

j += 1

li[low:high+1] = ltmp

def mergeSort(li, low, high):

if low < high:

mid = (low+high) // 2

### 分解

mergeSort(li, low, mid) ### O(logn)

mergeSort(li, mid+1, high)

print('分解后:',li[low:high + 1])

### 合并

merge(li, low, mid, high)

print('合并后:', li[low:high + 1])

###

### 計(jì)數(shù)排序

def countSort(li):

count = [0 for x in range(11)]

for i in li:

count[i] += 1

print(count)

li.clear()

for n, num in enumerate(count):

### n : 索引 對(duì)應(yīng)的是li中的值 n = 2

### num: 索引出現(xiàn)的次數(shù) 對(duì)應(yīng)的是li中的值出現(xiàn)的次數(shù) num = 1

for x in range(num):

li.append(n)

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

countSort(li)

# mergeSort(li, 0, len(li)-1)

exit()

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

#

# Quick_Sort(li, 0, len(li)-1)

# print(li)

# exit()

import time

import random

li = [random.randint(0, 10000) for i in range(100000)]

start_time = time.time()

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

print("快速排序時(shí)間:%s" % (time.time() - start_time))

li = [random.randint(0, 10000) for i in range(100000)]

start_time = time.time()

BubbleSort(li)

print("冒泡排序時(shí)間:%s" % (time.time() - start_time))

li = [random.randint(0, 10000) for i in range(100000)]

start_time = time.time()

SelectSort(li)

print("選擇排序時(shí)間:%s" % (time.time() - start_time))

li = [random.randint(0, 10000) for i in range(100000)]

start_time = time.time()

InsertSort(li)

print("插入排序時(shí)間:%s" % (time.time() - start_time))

本文地址:https://blog.csdn.net/qq_37156624/article/details/109645732

希望與廣大網(wǎng)友互動(dòng)??

點(diǎn)此進(jìn)行留言吧!

總結(jié)

以上是生活随笔為你收集整理的python集合排序_排序算法集合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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