#直接插入排序
definsert
(nums)
:for i in
range(1
,len
(nums)):
for j in
range
(i-1,-
1,-1
):if nums[j+1]
: temp = nums[j]
nums[j]
= nums[j+1]
nums[j+1]
= temp
else
:break
return nums
# 氣泡排序
defbubble_sort
(nums)
:for i in
range(1
,len
(nums)):
for j in
range(0
,len
(nums)
- i)
:if nums[j+1]
: temp = nums[j]
nums[j]
= nums[j+1]
nums[j+1]
= temp
return nums
# 選擇排序
defselect_******
(nums)
:for i in
range(0
,len
(nums)):
nummin = nums[i]
for j in
range
(i+1
,len
(nums)):
if nums[j]
< nummin:
temp = nums[j]
nums[j]
= nummin
nummin = temp
nums[i]
= nummin
return nums
# 希爾排序
defshell_sort
(items)
: n =
len(items)
step = n //
2#step = 5
while step >0:
for cur in
range
(step, n)
: i = cur
print
(i,step,items[i-step]
,items[i]
)while i >= step and items[i-step]
> items[i]
:print
('進入while'
) items[i - step]
, items[i]
= items[i]
, items[i-step]
print
('i:'
,i,'step:'
,step)
i -= step ### ?????????????
print
(items)
step = step //
2return items
#歸併排序
defmerge
(arr, l, m, r)
: n1 = m - l +
1 n2 = r- m
# 建立臨時陣列
l =[0
]*(n1)
r =[0
]*(n2)
# 拷貝資料到臨時陣列 arrays l 和 r
for i in
range(0
, n1)
: l[i]
= arr[l + i]
for j in
range(0
, n2)
: r[j]
= arr[m +
1+ j]
# 歸併臨時陣列到 arr[l..r]
i =0# 初始化第乙個子陣列的索引
j =0# 初始化第二個子陣列的索引
k = l # 初始歸併子陣列的索引
while i < n1 and j < n2 :
if l[i]
<= r[j]
: arr[k]
= l[i]
i +=
1else
: arr[k]
= r[j]
j +=
1 k +=
1# 拷貝 l 的保留元素
while i < n1:
arr[k]
= l[i]
i +=
1 k +=
1# 拷貝 r 的保留元素
while j < n2:
arr[k]
= r[j]
j +=
1 k +=
1def
mergesort
(arr,l,r)
:if l < r:
m =int(
(l+(r-1)
)/2)
mergesort(arr, l, m)
mergesort(arr, m+
1, r)
merge(arr, l, m, r)
arr =[1
,5,8
,7,6
,4,5
,8,9
,11]n =
len(arr)
print
("給定的陣列"
)for i in
range
(n):
print
("%d"
%arr[i]),
mergesort(arr,
0,n-1)
print
("\n\n排序後的陣列"
)for i in
range
(n):
print
("%d"
%arr[i]
)# 快速排序
defquick_sort
(a,start,end)
:if start < end:
low , high , pivotkey = start , end , a[start]
while
(low
(a[high]
< pivotkey)
:break
high -=
1#將找到的值放入a[low]
if(low < high)
: a[low]
= a[high]
low +=
1#從左往右找到第乙個大於pivotkey的值
while
(low
(a[low]
> pivotkey)
:break
low +=
1#將這個值賦給上乙個留下的坑a[high]
if(low
: a[high]
= a[low]
high -=
1 a[low]
= pivotkey
quick_sort(a , start ,low-1)
quick_sort(a , low+
1, end)
return a
資料結構 排序演算法
include include define maxitem 100 typedef char keytype 5 typedef int elemtype typedef struct rec elemnode maxitem 氣泡排序演算法 void bubblesort elemnode r,...
資料結構 排序演算法
排序演算法分為內部排序和外部排序兩大類。內部排序 在計算機記憶體中完成的排序演算法 外部排序 不能再記憶體中文完成,必須在磁碟或者磁帶上完成的排序演算法 內部排序是研究的重點問題,通常我們講的八大排序演算法也主要是講的內部排序演算法。排序演算法的穩定性和時間空間複雜度 本文重點介紹以下幾種排序演算法...
資料結構 排序演算法
直接插入排序是指將r i r n 插入到已經有序的r 1 r i 1 序列中。r 0 是乙個哨兵,起到作為邊界條件並作為暫存單元的作用。實際上,一切為簡化邊界條件而引入的附加節點 元素 均可稱為哨兵。例如單鏈表中的頭結點。對於有n個記錄的集合,要進行n 1趟排序。其最優時間複雜度是o n 平均時間複...