數值演算法與非數值演算法
A. (2)非數值計算常用經典演算法
1、交換(兩量交換藉助第三者) 不藉助第三個變數
參考:
http://blog.csdn.net/hackbuteer1/article/details/6531775
2、累加
累加演算法的要領是形如「s=s+A」的累加式,此式必須出現在循環中才能被反復執行,從而實現累加功能。「A」通常是有規律變化的表達式,s在進入循環前必須獲得合適的初值,通常為0。
例如:求1+2+3+……+100的和。
sum=0;i=1;
sum=sum+i;
i++;
3、累乘
累乘演算法的要領是形如「s=s*A」的累乘式,此式必須出現在循環中才能被反復執行,從而實現累乘功能。「A」通常是有規律變化的表達式,s在進入循環前必須獲得合適的初值,通常為1。
例如:求10!
n=10;sum=1;
n>0
sum=sum*n;
n--;
也稱為「枚舉法」,即將可能出現的每一種情況一一測試,判斷是否滿足條件,一般採用循環來實現。
例如:用窮舉法輸出所有的水仙花數(即這樣的三位正整數:其每位數位上的數字的立方和與該數相等,比如:13+53+33=153)。
參考:
http://www.cnblogs.com/fanyong/archive/2012/03/23/2413559.html
http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html
冒泡排序
假設要對含有n個數的序列進行升序排列,冒泡排序演算法步驟是:
1、從存放序列的數組中的第一個元素開始到最後一個元素,依次對相鄰兩數進行比較,若前者大後者小,則交換兩數的位置;
2、第一趟結束後,最大數就存放到數組的最後一個元素里了,然後從第一個元素開始到倒數第二個元素,依次對相鄰兩數進行比較,若前者大後者小,則交換兩數的位置;
3、重復步驟1 n-1趟,每趟比前一趟少比較一次,即可完成所求。
(2)選擇法排序
選擇法排序是相對好理解的排序演算法。假設要對含有n個數的序列進行升序排列,演算法步驟是:
1、從數組存放的n個數中找出最小數的下標(演算法見下面的「求最值」),然後將最小數與第1個數交換位置;
2、除第1個數以外,再從其餘n-1個數中找出最小數(即n個數中的次小數)的下標,將此數與第2個數交換位置;
3、重復步驟1 n-1趟,即可完成所求。
(3)插入法排序
要想很好地掌握此演算法,先請了解「有序序列的插入演算法」,就是將某數據插入到一個有序序列後,該序列仍然有序。插入法排序的要領就是每讀入一個數立即插入到最終存放的數組中,每次插入都使得該數組有序。
參考:
http://www.cnblogs.com/fanyong/archive/2012/03/23/2413553.html
**(4)歸並排序 **
即將兩個都升序(或降序)排列的數據序列合並成一個仍按原序排列的序列。
例如:有一個含有6個數據的升序序列和一個含有4個數據的升序序列,將二者合並成一個含有10個數據的升序序列。
參考: http://blog.csdn.net/cwj649956781/article/details/7409635
(1)順序查找(即線性查找)
順序查找的思路是:將待查找的量與數組中的每一個元素進行比較,若有一個元素與之相等則找到;若沒有一個元素與之相等則找不到。
例如:任意讀入10個數存放到數組a中,然後讀入待查找數值,存放到x中,判斷a中有無與x等值的數。
(2)折半查找(即二分法)
順序查找的效率較低,當數據很多時,用二分法查找可以提高效率。使用二分法查找的前提是數列必須有序。
二分法查找的思路是:要查找的關鍵值同數組的中間一個元素比較,若相同則查找成功,結束;否則判別關鍵值落在數組的哪半部分,就在這半部分中按上述方法繼續比較,直到找到或數組中沒有這樣的元素值為止。
例如:任意讀入一個整數x,在升序數組a中查找是否有與x等值的元素。
參考: http://blog.csdn.net/shuilan0066/article/details/7608096
B. 演算法等同於計算方法
演算法不等同於計算方法。
演算法的定義為解決問題確定的方法和有限的步驟。
而演算法分為兩大類:數值運算演算法和非數值運算演算法。計算方法中並不包括非數值運算演算法,因此演算法不等同於計算方法,當然啦 這是在計算機學中的定義,不同地方將有不同的意義,若是僅僅談數學上的演算法,確實與計算方法相似。
純手打,希望能幫到你~