演算法 常見演算法分類和思想

2021-10-09 08:14:25 字數 2120 閱讀 9087

演算法分類分為:

1.基礎演算法:包括字串,陣列,正規表示式,排序,遞迴等。

2.資料結構:堆,棧,佇列,鍊錶,矩陣,二叉樹等。

3.高階演算法:貪心演算法,動態規劃等。

它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序(如從大到小、首字母從a到z)錯誤就把他們交換過來。

void

bubble_sort

(int arr,

int len)

}

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

void

selection_sort

(int arr,

int len)

}

它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。

void

insertion_sort

(int arr,

int len)

}

希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。

void

shell_sort

(int arr,

int len)

}

把資料分為兩段,從兩段中逐個選最小的元素移入新資料段的末尾。

void

merge_sort_recursive

(int arr,

int reg,

int start,

int end)

void

merge_sort

(int arr,

const

int len)

在區間中隨機挑選乙個元素作基準,將小於基準的元素放在基準之前,大於基準的元素放在基準之後,再分別對小數區與大數區進行排序。

void

swap

(int

*x,int

*y)void

quick_sort_recursive

(int arr,

int start,

int end)

if(arr[left]

>= arr[end]

)swap

(&arr[left]

,&arr[end]);

else

left++;if

(left)

quick_sort_recursive

(arr, start, left -1)

;quick_sort_recursive

(arr, left +

1, end);}

void

quick_sort

(int arr,

int len)

九大內部排序

分類方法時間複雜度

空間複雜度

穩定性最好

最壞平均

交換排序

交換排序

o(n)

o(o(

o(1)

穩定氣泡排序

o(n)

o(o(

o(1)

穩定快速排序

o(o(

o(o(

不穩定插入排序

直接插入排序

o(n)

o(o(

o(1)

穩定希爾排序

o(o(

o(1)

不穩定選擇排序

簡單選擇排序

o(o(

o(o(1)

不穩定堆排序

o(o(

o(o(1)

不穩定其他

歸併排序

o(o(

o(o(n)

穩定計數排序

o(d(r+n))

o(d(r+n))

o(d(r+n))

o(r)

穩定

常見演算法思想

演算法 窮舉演算法思想 exhaustive attack method 窮舉演算法是最簡單的一種演算法,其依賴於計算機的強大計算能力來窮盡每一種可能的情況,從而達到求解問題的目的。窮舉演算法效率並不高,但是適應於一些沒有明顯規律可循的場合 窮舉演算法的基本思想就是從所有可能的情況中搜尋正確的答案,...

常見5大演算法思想(排序 查詢 分類)

1.動態規劃簡單介紹 推薦博文 漫畫動態規劃 動態規劃中的三個重要的概念 最優子結構 邊界狀態轉移公式 例 爬樓梯問題,一次一步或者兩步,f 1 1 f 2 2 f n f n 1 f n 2 n 3 1 f n 1 和 f n 2 是f n 的 最優子結構 2 f 1 和f 2 可以直接得到結果,...

常見排序演算法思想

穩定的排序演算法有 1.氣泡排序 將小的數往前挪,將大的數往後挪。2.插入排序 移動第i 1的那個數,在此數之前的序列中,從後往前進行比較相鄰的兩個數,將更小的數放前面,保證每次第i 1個之前的子串行有序。3.歸併排序 利用分治的思想,將乙個無序的陣列分解若干以兩個數為一組的子陣列,然後將每個子陣列...