程式設計基本演算法(一)

2022-03-06 07:43:08 字數 1827 閱讀 7719

筆者好長時間沒有更新部落格了,乙個原因是開發的專案所用到的技術都是老技術點,所接觸到的知識都是行業邏輯流程,所以只是自己做了總結並沒有拿上來分享。另外乙個原因是目前筆者在重新學習c++語言以及計算機的一些基本知識(演算法等)。

下面的**為c++**,好了直接進入正題

程式設計基本演算法(一)

程式設計基本演算法(二)

程式設計基本演算法(三)

折半查詢

又稱二分查詢。

使用條件:有序集合。

演算法思想:先確定待查記錄所在的範圍(區間),然後逐步縮小範圍直到找到或者不找到為止。

關鍵點在於比較中間位置所記錄的關鍵字和給定值的比較,如果比給定值大(這裡假設集合從小到大排列)那麼可以縮小區間範圍(集合開始-->中間位置的上一位),在比較該區間的中間位置所記錄的關鍵字與給定值,依次迴圈到找到或者找不到位置。

舉例程式設計:這裡有乙個整數資料 int a[10]=;

(1)這是遞迴(感謝園友zdd指出這裡判斷條件的錯誤,應該改為if(min>max)

//折半查詢

//陣列必須按照一定的順序

//引數:最大,最小,目標(引數型別為整數)

intbinarysearch(

intmin,

intmax,

intnum)

else

}(2)非遞迴

//非遞迴演算法

intbinarysearch_f(

intnum)

return-1

;}效能分析:時間複雜度o(logn)

插入排序

使用條件:可對比大小的集合。

演算法思想:將乙個記錄插入到已排好序的有序列中,從而得到乙個新的,記錄數增1的有序序列。待插記錄依次比較已經排好序列,如果序列數大於該待插記錄,那麼該序列往後挪一位,直到找到序列小於待插記錄,那麼此時插入到該序列的後乙個位置,依次上面操作,直至插完位置。

舉例程式設計:int b[10]=將其排序

//插入排序

//這裡temp是哨兵位

//從小到大

void

insertsort()

else

}b[j+1

]=temp;

}cout

<<

"the sort is:";

for(

inti=0

;i<

10;i++)

cout

<<

endl;

}效能分析:時間複雜度o(n^2)

折半插入排序

使用條件:可對比大小的集合。

演算法思想:基本思想與簡單插入排序思想相似,唯一的不同點在於找出插入的位置,簡單插入排序用的是依次比較,這裡折半插入排序改進了,將依次查詢改進成折半查詢

舉例程式設計:int b[10]=將其排序

void

binaryinsertsort()

else

} for(j=

i-1;j

>=

max+1;j

--)b[max+1

]=temp;

}cout

<<

"the sort is:";

for(

inti=0

;i<

10;i++)

cout

<<

endl;

}效能分析:時間複雜度o(n^2)

雖然這裡時間複雜度與簡單插入排序一樣,但是通過查詢找到插入的位置用的比較次數是明顯減少的。

C Socket基本程式設計一

c socket 基本程式設計一 同步字串的服務端與客戶端通訊 客戶端 using system using system.collections.generic using system.text using system.net using system.net.sockets namespac...

(一)UDP基本程式設計步驟

udp服務端程式設計分5步 1.建立 udp socket套接字,用socket函式。2.設定socket的屬性,用setsockopt 函式,可選 3.往socket繫結包含 ip資訊,位址資訊的 struct sockaddr in ipv4 結構體。用bind 函式 4.迴圈接收訊息,用rec...

基本演算法題練習一

由於被很多公司的筆試程式設計題虐了,才想著要做做演算法題了。自己的基礎看來太薄弱了些。因此決定先從賽碼網的基本演算法題開始做起。這裡想記錄一下賽碼網裡面題的情況。由於基礎薄弱,就先從兩星的題開始做起。每日兩道。這道題看起來比較簡單,我們可以從第一級樓梯開始分析。當樓梯只有一級時,有0種走法 當有2級...