排序算法&查找算法

排序算法:

  • 插入排序
    • 直接插入排序
    • 希爾排序
  • 交換排序
    • 冒泡排序
    • 快速排序
  • 選擇排序
    • 直接選擇排序
    • 樹形選擇排序
    • 堆排序
  • 歸併排序
  • 基數排序
    • 多關鍵字排序
    • 鏈式基數排序

查找算法:

  • 靜態查找
    • 順序查找
    • 二分查找
    • 分塊查找
  • 動態查找
    • 二叉排序樹
    • 平衡二叉樹
    • B-樹和B+樹
    • 紅黑樹
  • 哈希表查找

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、直接插入排序

簡介:n個數據,從1到n一個一個插入進行排序。

空間複雜度:O(1)

時間複雜度:O(n2)

算法穩定性:穩定算法

2、希爾排序

簡介:取幾個增量,如5,2,1(最後一個增量必須爲1),然後從左到右5個5個的排序(如:1到5數據排序,然後2到6數據排序),最後重複操作按2個,1個進行排序。

空間複雜度:O(1)

時間複雜度:O(nlog2n)

算法穩定性:不穩定算法


3、冒泡排序

簡介:從第一個數據開始兩兩比較,直到在一趟兩兩比較中沒有發生交換,排序結束

空間複雜度:O(1)

時間複雜度:O(n2)

算法穩定性:穩定算法

4、快速排序

感謝:MoreWindows

代碼:

public void quick_sort(int[]s,int l,int r){
	if(l<r){
	int i=l,j=r,x=s[l];
	while(i<j){
	while(i<j&&s[j]>x)   j--;//從後面找
	if(i<j)   s[i++] = s[j];
	while(i<j&&s[i]<=x)   i++;//從前面找
	if(i<j)   s[j--] = s[i];
	}
	}
	s[i]=x;
	quick_sort(s,l,i-1);
	quick_sort(s,i+1,r);
}

簡介:先從數列中取出一個數作爲基準數;分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊;再對左右區間重複第二步,直到各區間只有一個數

空間複雜度:O(n)

時間複雜度:O(nlog2n)

算法穩定性:不穩定算法


5、直接選擇排序

簡介:每一趟從待排序列中取關鍵字最小的記錄,下一趟取n-1個記錄中最小的記錄

空間複雜度:O(1)

時間複雜度:O(n2)

算法穩定性:不穩定算法

6、歸併排序

感謝:MoreWindows

簡介:通過遞歸將待排序數組分成只有一個一個的數組,再把相鄰的數組合並(類似快排的分治法)

小的在左邊,大的在右邊,遍歷完之後就成了一個一個的數組(已經有序了),直接合並就是了,但是必須實時更新原數組的序列。

空間複雜度:O(n)

時間複雜度:O(nlog2n)

算法穩定性:穩定算法


7、排序算法總結


8、查找算法總結

1.二分查找需要有序表;

2.B+樹和B-樹:B+樹是B-樹的變體,搜索關鍵字時,B+只有到達葉子結點才能命中(終點命中),B-樹可以在非葉子結點命中(任意位置命中),性能接近二分查找;

3.Hash函數要解決問題:優秀的Hash函數,解決衝突。

4.優秀的Hash函數可以避免很多衝突,但不能解決衝突,不能因爲函數的複雜性而犧牲Hash查找的性能,所以需要有很好的衝突解決辦法,只要有衝突就會涉及到查找,數據量大沖突就多,查找的時間就長,Hash查找性能降低。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章