018 Python語法之八大排序演算法以及對比

2021-09-28 20:59:53 字數 3647 閱讀 8562

1. 演算法原理

第一輪比較,將前後兩個元素兩兩比較,然後大的元素往後排列

進過n輪比較後,得到的是排序過的列表

2. 氣泡排序的三大實現

實現1:

普通氣泡排序(比較次數42)

list1 = [7, 1, 2, 3, 4, 5, 6]

length = len(list1)

for x in range(0, length - 1):

for y in range(0, length - 1):

if list1[y] > list1[y + 1]:

list1[y], list1[y + 1] = list1[y + 1], list1[y]

print(list1)

實現2:

更新版氣泡排序(比較次數21)

list1 = [7, 1, 2, 3, 4, 5, 6]

for x in range(0, length - 1):

for y in range(0, length - 1 - x):

if list1[y] > list1[y + 1]:

list1[y], list1[y + 1] = list1[y + 1], list1[y]

print(list1)

實現3:

究極版氣泡排序(比較次數11)

list1 = [7, 1, 2, 3, 4, 5, 6]

length = len(list1)

for i in range(0, length - 1):

bool = true

for j in range(0, length - 1 - i):

print(list1)

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

list1[j], list1[j + 1] = list1[j + 1], list1[j]

bool = false

if bool:

break

1. 演算法原理

進行len-1次迴圈,每次都將下標為i的元素插入到它前面排好序的列表中

直到下標到最後乙個元素就排序好了

2. 插入排序的實現

def insertsort(list1):

length = len(list1)

temp = 0

# 進行len - 1 次迴圈,每次迴圈都將下標為i的元素插入到它前面已經排好序的佇列中

for i in range(1, length):

if list1[i] < list1[i-1]:

temp = list1[i]

while i > 0 and temp < list1[i-1]:

list1[i] = list1[i-1]

i -= 1

list1[i] = temp

list1 = [7, 1, 2, 3, 4, 5, 6]

insertsort(list1)

print(list1)

1. 演算法原理

首先找到最小的元素,然後將最小的元素排到第乙個位置

然後第二個最小的元素排在第二個位置

以此類推…

2. 選擇排序的實現

def selectsort(list1):

length = len(list1)

for i in range(0, length):

minindex = i

for j in range(i + 1, length):

if list1[minindex] > list1[j]:

minindex = j

list1[minindex], list1[i] = list1[i], list1[minindex] # 將最小值排到前面的位置

1. 演算法原理

首先進行一輪排序,將資料分成左右兩部分,左邊所有資料都比右邊的資料要小

然後再遞迴對這兩部分資料進行快速排序

2. 快速排序的實現

import random

import time

import sys

def quicksort(list1, left, right):

if left >= right:

return

key = list1[left]

low = left

high = right

while left < right:

while left < right and list1[right] >= key:

right -= 1

list1[left] = list1[right]

while left < right and list1[left] <= key:

left += 1

list1[right] = list1[left]

list1[right] = key

quicksort(list1, low, left - 1)

quicksort(list1, left + 1, high)

def quicksort2(list1, left, right):

if left >= right:

return

key = list1[left]

low = left

high = right

while left < right:

while left < right and list1[right] >= key:

right -= 1

list1[left] = list1[right]

while left < right and list1[left] <= key:

left += 1

list1[right] = list1[left]

list1[right] = key

if low < left - 1:

quicksort(list1, low, left - 1)

if left + 1 < high:

quicksort(list1, left + 1, high)

list1 =

for i in range(1, 2500):

sys.setrecursionlimit(3000)

time1 = time.time()

quicksort(list1, 0, len(list1) - 1)

time2 = time.time()

sys.setrecursionlimit(3000)

time3 = time.time()

quicksort2(list1, 0, len(list1) - 1)

time4 = time.time()

print("1總共用了:%.2f秒" % (time2 - time1))

print("2總共用了:%.2f秒" % (time4 - time3))

3. 兩種快速排序的對比

第一種quicksort所用的時間大概是第二種排序的時間的 1 / 30.

第一種方式會比第二種方式多呼叫很多次方法占用記憶體相對會高一點.

八大排序之快排

public class quicksort sort a,0,5 for int i 0 i a.length i public static void sort int a,int left,int right int i left int j right int key a left whil...

八大排序演算法之氣泡排序(python)

氣泡排序演算法的原理 比較相鄰的元素,如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較 這個演算法的...

八大排序之堆排序

public class heapsort heapsort num,num.length for int i 0 i 0 i heapadjust array,i,length 從最後乙個元素開始對序列進行調整,不斷的縮小調整的範圍直到第乙個元素 for i length 1 i 0 i priv...