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...