排序演算法是《資料結構與演算法》中最基本的演算法之一。
排序演算法可以分為內部排序和外部排序
內部排序是資料記錄在記憶體中進行排序。
而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。
常見的內部排序演算法有:插入排序、希爾排序、選擇排序、氣泡排序、歸併排序、快速排序、堆排序、基數排序等。
用一張圖概括:
平方階 (o(n2)) 排序 各類簡單排序:直接插入、直接選擇和氣泡排序。
線性對數階 (o(nlog2n)) 排序 快速排序、堆排序和歸併排序;
o(n1+§)) 排序,§ 是介於 0 和 1 之間的常數。 希爾排序
線性階 (o(n)) 排序 基數排序,此外還有桶、箱排序。
演算法的穩定性定義為:對於待排序列中相同項的原來次序不能被演算法改變則稱該演算法穩定關於穩定性:
穩定的排序演算法:氣泡排序、插入排序、歸併排序和基數排序。
不是穩定的排序演算法:選擇排序、快速排序、希爾排序、堆排序。
def
linear_search
(data, value)
:for i in
range
(len
(data)):
if data[i]
== value:
return i
return
0
此演算法時間複雜度為o(n)
def
bin_search
(data, value)
: low =
0 high=
len(data)-1
while low <= high:
mid =
(low + high)//2
if data[mid]
== value:
return mid
elif data[mid]
> value:
high = mid -
1else data[mid]
< value:
low = mid +
1
時間複雜度為o(logn)
給定乙個 n 個元素有序的(公升序)整型陣列 nums 和乙個目標值 target ,寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 -1。
示例 1:
輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現在 nums 中並且下標為 4
示例 2:
輸入: nums = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不存在 nums 中因此返回 -1
你可以假設 nums 中的所有元素是不重複的。
n 將在 [1, 10000]之間。
nums 的每個元素都將在 [-9999, 9999]之間。
class
solution
(object):
defsearch
(self, nums, target)
:"""
:type nums: list[int]
:type target: int
:rtype: int
"""low =
0 high =
len(nums)-1
while low <= high:
mid =
(low + high)//2
if nums[mid]
== target:
return mid
elif nums[mid]
< target:
low = mid +
1else
: high = mid -
1return
-1
def
bubble_soft
(li)
:for i in
range
(len
(li)-1
):for j in
range
(len
(li)
- i -1)
:if li[j]
> li[j+1]
: li[j]
, li[j+1]
= li[j+1]
, li[j]
優化:如果列表已經排序完成,則可提前中斷排序
def
bubble_soft
(li)
:for i in
range
(len
(li)-1
):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
ifnot exchange:
break
def
select_soft
(li)
:for i in
range
(len
(li)-1
):min_pos = i
for j in
range
(i+1
,len
(li)):
if li[min_pos]
> li[j]
: min_pos = j
li[i]
, li[min_pos]
= li[min_pos]
, li[i]
def
insert_sort
(li)
:for i in
range(1
,len
(li)):
tmp = li[i]
j = i -
1while j >=
0and li[j]
> tmp:
li[j+1]
= li[j]
j-=1 li[j+1]
= tmp
以上就是一些簡單的查詢和排序經典演算法,再接再厲,每日學習一點演算法,然後溫故而知 演算法學習筆記 DAY2
滿足要求 雜湊表 平均情況 雜湊表 最糟情況 陣列 鍊錶 查詢o 1 o 1 o 1 o n o n o n o 1 o 1 o 1 o n o n o n 插入o 1 o 1 o 1 o n o n o n o n o n o n o 1 o 1 o 1 刪除o 1 o 1 o 1 o n o n...
Python學習之路Day2
message world print message 輸出結果為 world message hello world 輸出結果為 hello world print message 用引號 單 雙引號 括起來的都是字串 str1 this is a string str2 this is also...
Python基礎學習 Day2
python基礎學習 day2 pop 可以移除列表指定位置的物件並返回被刪除物件的值,注意該方法預設值為列表中的最後乙個元素且有返回值 del 移除列表中指定位置的多個物件,del 方式可以刪除整個列表,且列表刪除後無法訪問。拷貝分為copy 拷貝父物件,不會拷貝物件的內部的子物件和deepcop...