排序演算法 補充

2021-07-29 03:52:35 字數 1091 閱讀 1292

對於上次學習借鑑到的大師級的排序演算法,感概良多,從演算法執行的效率上來說,quicksort()不考慮普遍的最環情況,它的速隊的確是排序演算法中的佼佼者。

這次的學習到的演算法包括了插入排序(直接插入,折半插入,希爾排序),選擇排序(堆排序),都是各有利弊。

基本的演算法實現如下,因為遞迴使用的不是很好,同時為了方便閱讀就直接進入非遞迴了。

#include using namespace std;

//插入排序//直接插入排序

void sort2(int a,int size)

a[j+1]=x;

}for(int i=0;i//折半插入排序(時間複雜度最壞的情況是 o(n^2),最好的情況是o(nlgn))

void sort3(int a,int size)

for(int i=0;i//希爾排序:將待排序紀錄分割成若干的「較為稀疏」的子串行,在子串行中分別進行插入排序。分割的區間減小,然後再次進行上述的操作,最後在對全部的序列進行一次直接插入排序(即最後的分割區間的大小為1)。

//它類似於直接插入排序,但是優於直接插入排序,時間複雜度為o(n^1.5)。因為在插入排序的時候每一輪的改變只會減少乙個逆轉數(某個待排序紀錄之前的序列大於它本身的紀錄的個數,比如序列 8 6 9 3 5 7 對於5來說,它的逆轉數為3,對於6來說它的逆轉數為1),對於希爾排序每次的插入減少的逆轉數不只乙個。

//1.先進行一次排序

void sort4(int a,int size,int delta)//dalta代表的是增量

;void sift(node r,int k,int m)//r[k...m]是以r[k]為根的完全二叉樹,且分別以r[2k]和r[2k+1]為根的左右子樹的大根堆

}r[i]=t;

}//初建堆演算法

void heap(node a,int size)

//堆排序

void sort5(node a,int n)

}int main(int argc, const char * argv)

如果大家有更為高效的演算法可以一起分享

排序演算法 筆記 有待補充

常用排序演算法對比 一 內部排序 指待排序記錄存放在計算機隨機儲存器中進行的排序過程 二 外部排序 指待排序記錄的數量很大,以致記憶體一次不能容納全部記錄,在排序過程中尚需對外存進行訪問的排序過程 三 排序方法穩定和不穩定 四 內部排序常用方法 1.插入排序 1 直接插入排序 基本思想 假設待排序的...

演算法導論學習補充 希爾排序

希爾排序思想 先將整個待排記錄序列分割成若干子串行分別進行直接插入排序,待整個序列中的記錄 基本有序 時,再對全體記錄進行一次直接插入排序 希爾排序時間複雜度為o n 3 2 public class shellsort arr j d temp 外層排序演算法 param arr 要排序的陣列 p...

雜湊演算法補充

比如從10000個從小到大排列且不連續數字裡找出8654 普通方法就是用眼瞅,從左到右 運氣好瞅一次,運氣不好瞅一萬次 於是就有了二分法,取出中間的值 左邊的值一定比中間的值小 右邊的值一定比中間的值大 於是找到8654所用的時間大大縮短可以把把文字內容 一串字元計算成一串hash值 一串內容 ha...