必須掌握的常用演算法之一

2021-06-28 11:31:25 字數 1069 閱讀 5866

瑞士計算機科學家尼克勞斯.沃思提出了乙個著名的公式~資料結構+演算法=程式。從此公式可以看出,演算法是構成程式的乙個重要組成部分,而所謂的演算法                ,可以理解為解決某一確定問題所採用的具體步驟和方法。那麼作為程式開發者,就必須掌握一些常見演算法,之前幾篇部落格提到了排序,這裡來個收尾,給大家分享下較為經典的排序~歸併排序。

歸併排序又稱合併排序,其演算法思想是將待排序序列分為兩個部分,依次對分得的兩個部分再次使用歸併排序,之後再對其進行合併。僅從演算法上了解歸併排序很抽象的說。接下來以序列a[0],a[1],...a[n-1]進行講解,在此採用自頂向下的實現方法,操作步驟如下:

1)將所有進行的排序序列分為左右兩個部分,如果要進行排序序列的起始元素下標,為first,最後乙個元素為last,那麼左右兩部分之間的臨界點下標mid=(first+last)/2這兩部分分別是a[fiirst...mid],a[mid+1...last].

2)將上面所劃分得兩部分為序列繼續按1)繼續進行劃分,直到劃分區間長度為1.

3)將劃分結束後的序列進行歸併排序,排序方法為對所有分的n個子序列進行兩兩合併,得到n/2或n/2+1個含有兩個元素的子串行,再對得到的子串行進行合併。直到得到乙個長度為n的有序序列為止。

且看下面**實現歸併排序:

#include #include #define n 7

void merge(int arr, int low, int mid, int high)

else

}if(left_low <= left_high)

//若第乙個序列有剩餘,直接複製出來粘到合併序列尾

if(right_low <= right_high)

//若第二個序列有剩餘,直接複製出來粘到合併序列尾

for(i=0;i> 1);

merge_sort(arr, first, mid);

merge_sort(arr, mid+1,last);

merge(arr,first,mid,last);

}return ;

}int main()

; printf("排序前\n");

for(i=0;i

淺解前端必須掌握的演算法(一) 氣泡排序

雖然前端面試中很少會考到演算法類的題目,但是你去大廠面試的時候就知道了,對基本演算法的掌握對於從事計算機科學技術的我們來說,還是必不可少的,每天花上 10 分鐘,了解一下基本演算法概念以及前端的實現方式。另外,掌握了一些基本的演算法實現,對於我們日常開發來說,也是如虎添翼,能讓我們的 js 業務邏輯...

你必須掌握的,快速冪演算法

求x的n次方,可以使用暴力解法,這種演算法時間複雜度為o n 並且,當x和n比較大的時候,可能會存在溢位。可以使用快速冪的演算法 思路 在計算機中,十進位制可以和二進位制進行轉換,利用該原理可將指數轉為 通過快速冪可將指數運算時間複雜度由o n 降低到o longn 計算xn,將n寫成2進製,在計算...

必須掌握的排序

大神總結的很好。學而時習之,善於總結。非常恨那些把演算法排序之類的搞得異常麻煩的人,盡可能簡單一點,簡單了,容易理解了,才好記,上了戰場,才用得著.人家的不好用,只好自己總結,重寫原理與過程.口訣 冒泡 n 1,n i 1,比的是j與j 1 插入 n 1,i 1,比的是i 1與j 選擇 n,n,開始...