常用基礎演算法總結

2022-08-30 22:12:27 字數 1561 閱讀 8189

泡排序:(由於在排序的過程中總是小數在前,大數在後,相當於氣泡上公升,這是極經典的基礎演算法)

$arrar = array('a', 'f', 'c', 'b', 'e', 'h', 'j', 'i');

function maopao($array)

for($i=0; $i<$len; $i++)}}

return $array;

}2、快速排序:(是對氣泡排序的一種改進。基本思想是:通過一趟排序,將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的資料小,然後在按此方法對這兩部分資料進行開速排序,整個排序過程可以遞迴進行,一次達到整個資料變成有序序列)

function quicksort($arr)else

if(min != i)}}

4、插入排序(從第乙個元素開始,該元素可以認為已經被排序,取出下乙個元素,在已經排序的元素序列中從後向前掃瞄,如果該元素(已排序)大於新元素,將該元素移動到下一位置)。

function insert_sort() n為要排序數的個數。

即:先將要排序的一組記錄按某個增量d(n/2,n為要排序數的個數)分成若干組子串行,每組中記錄的下標相差d.對每組中全部元素進行直接插入排序,然後再用乙個較小的增量(d/2)對它進行分組,在每組中再進行直接插入排序。繼續不斷縮小增量直至為1,最後使用直接插入排序完成排序。

void print(int a, int n ,int i)

cout<* 直接插入排序的一般形式 

* @param int dk 縮小增量,如果是直接插入排序,dk=1 

* / 

void shellinsertsort(int a, int n, int dk) 

a[j+dk] = x;            //插入到正確位置

} print(a, n,i );

/** 

* 先按增量d(n/2,n為要排序數的個數進行希爾排序 

*/void shellsort(int a, int n)

}  int main();  

//shellinsertsort(a,8,1); //直接插入排序  

shellsort(a,8);           //希爾插入排序

print(a,8,8); 

}6、採用非遞迴方式完成二分查詢法。

(1)  /*

非遞迴二分查詢演算法 

* 引數:整型陣列,需要比較的數.

*/  

public static int binarysearch(integersrcarray,int des)else if(des

//如果小於的話則移動最高層的"指標"  

high=middle-1;  

}else  

return-1;  

}  (2)採用遞迴方式完成二分查詢.

int mid = (low+high)/2;  

if(key == array[mid])else if(keyreturn binsearch(array,low,mid-1,key);  

}else if(key>array[mid])else }}

常用演算法總結

通過區域性盡可能達到最優 貪婪的名字由來 從而實現整體的最優,貪婪演算法不一定總是正確的,因為每個區域性最優並不代表整體最優,但是在某些時候,它是正確.例如 為了找出找出17美元61美分 用最少的紙幣 肯定是按照最大面額盡可能多得先找,然後依次,所以先找乙個10美元的,在找乙個5美元的,再找2個1美...

常用演算法總結

常用演算法總結 前言與準備工作 動態規劃演算法 貪心演算法 分治演算法 回溯法 分支限界法。此部分內容可以參考部落格 五大常用演算法 排序演算法 我的部落格已經做出了總結,看 資料結構中常用的排序演算法 二叉樹相關演算法 鍊錶相關演算法 雜湊表相關演算法 學習思路 先了解基本的概念,然後找到相關的例...

常用演算法總結

排序演算法穩定性的簡單形式化定義為 如果ai aj,排序前ai在aj之前,排序後ai還在aj之前,則稱這種排序演算法是穩定的。引用下網上的圖 1 氣泡排序 在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較,讓較大的數往下沉,較小的往上冒。即 每當兩相鄰的數比較...