泡排序:(由於在排序的過程中總是小數在前,大數在後,相當於氣泡上公升,這是極經典的基礎演算法)
$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 氣泡排序 在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較,讓較大的數往下沉,較小的往上冒。即 每當兩相鄰的數比較...