c 斐氏數列 語言 C語言基礎知識 三

2021-10-14 08:41:50 字數 3812 閱讀 4118

1. 演算法的基本概念和評價

1.1 基本概念

演算法(algorithm) 就是指對解題方案準確而又完整的描述, 是一系列解決問題的清晰指令.

1.2 評定標準

(1)時間複雜度(重點關注)

-主要用於描述演算法的時間消耗和問題規模的函式關係, 常數級的時間複雜度、 線性關係的時間複雜度、 平方級的時間複雜度...

(2)空間複雜度

-主要用於描述演算法的空間消耗和問題規模的函式關係

(3)正確性

-主要用於描述演算法的執行結果是否滿足要求

(4)可讀性

-主要用於描述演算法本身是否便於人們的閱讀

(5)健壯性

-主要用於描述演算法對非正常輸入的處理能力

1.3 演算法的描述方式

目前主要的演算法描述方式有: 自然語言、 偽**、 流程控制圖、 pad 圖... ...

2. 常用的查詢演算法

2.1 線性查詢演算法( 順序查詢演算法)

(1)演算法流程

使用目標元素與樣本數列中的第乙個元素起依次進行比較, 如果找到與目標元素相等的元素則表示查詢成功, 或者所有樣本元素與目標元素都比較完畢, 也沒有相等的元素, 則表示查詢失敗

int sequence_search(int *array, int length, int key) else if(key > sorted_array[mid])  else  }  return -1; }
(2)演算法評級平均時間複雜度 o(logn), 要求樣本元素有序2.3 插值查詢演算法( 二分法公升級版)(1)演算法流程

基於二分查詢演算法,將查詢點的選擇改進為自適應選擇,可以提高查詢效率

int insert_search(int *sorted_array, int length, int key)

else if(key > sorted_array[mid])

else

}

return -1;

}

(2)演算法評級

平均時間複雜度 o(log(logn)), 要求樣本元素有序

3. 常用的排序演算法

3.1 氣泡排序演算法

(1) 演算法流程

a. 比較相鄰位置的兩個元素, 如果第乙個元素的值比第二個元素大, 則交換位置

b. 對每一對相鄰的元素做相同的操作, 從開始的第一對到結尾的最後一對, 經過這一步, 最後的元素將是這組元素中的最大值

c. 對除了最後乙個元素以外的所有元素重複以上步驟

d. 持續對越來越少的元素重複以上步驟, 直到沒有元素交換為止

void bubble_sort(int *array, int length) } } }
(2) 演算法評價平均時間複雜度 o(n^2),穩定, 對樣本的有序性非常敏感3.2 插入排序方法(1) 演算法流程

a. 首先認為第乙個元素有序,

b. 取出乙個元素, 讓取出的元素與已經有序的元素從後向前依次進行比較

c. 如果左邊的元素大於取出的元素, 則將左邊的元素值賦值到下乙個元素的位置上

d. 如果左邊的元素小於等於取出的元素, 則將取出的元素賦值到左邊元素的右邊

e. 重複步驟 b, 直到處理完畢所有元素為止

void insert_sort(int *array, int length) array[preindex + 1] = current; } }
(2) 演算法評價平均時間複雜度 o(n^2), 穩定, 對樣本的有序性非常敏感, 但是賦值的次數比氣泡排序少, 因此一般情況下略優於氣泡排序演算法3.3 選擇排序法(1) 演算法流程

a. 從第乙個元素起依次取出, 並且假定取出的元素是最小值, 使用臨時變數min 記錄該元素的下標

b. 使用 min 記錄的元素與後續的元素依次進行比較

c. 如果後續元素中由比 min 記錄的元素還小的元素, 則重新記錄下標, 也就是後續元素變成了 min 記錄的最小值

d. 直到 min 記錄的最小值與後續所有元素比較完畢, 交換 min 記錄的元素與最開始假定的最小值

e. 重複上述步驟, 直到處理完畢左右元素為止

void select_sort(int *array, int length) array[i] = tmp; quick_sort(array, left, i-1); quick_sort(array, i+1, right); }}
( 2) 演算法評價平均時間複雜度 o(nlogn),不穩定, 對樣本的有序性不敏感

c 斐氏數列 語言 C語言上級經典練習50題

上機練習題 1.輸入乙個不超過五位的正整數,輸出其逆數。例如輸入12345,輸出應為54321。2.計算1 2 3 n的值,n是從鍵盤輸入的自然數。3.從終端 鍵盤 讀入20個資料到陣列中,統計其中正數的個數,並計算這些正數之和。4.從終端 鍵盤 將5個整數輸入到陣列a中,然後將a逆序複製到陣列b中...

C語言基礎知識之三

1.時間複雜度 t n o f n 只保留最高項 不要係數 1 o f n o 1 2 for 1層迴圈 o f n o n 3 for 2層迴圈,o f n o n 2 4 for 3層迴圈,o f n o n 3 5 for int i 2 i n i for int j 2 j i 1 j 共...

C語言基礎知識學習(三)

c語言基礎知識學習之程式結構 一 程式結構 程式結構 可以分為 順序 分支和迴圈 1分支結構 if else 1 if 的使用形式 如果條件為真執行語句塊1,否則跳過。if 常量 變數 表示式 2 if else 形式如果條件為真執行語句塊1,為假執行語句塊2。if 常量 變數 表示式 else 3...