查考**:
二叉樹借鑑上面乙個位址, 把常用的一些排序演算法總結歸納一下, 便於大家和自己的學習
一、插入排序
1、 直接插入排序
直接插入排序基本思想
1、基本思想
假設待排序的記錄存放在陣列r[
1..n]中。初始時,r[
1]自成1個有序區,無序區為r[
2..n]。從i=
2起直至i=n為止,依次將r[i]插入當前的有序區r[
1..i-
1]中,生成含n個記錄的有序區。
2、第i-
1趟直接插入排序:
通常將乙個記錄r[i](i=
2,3,…,n-
1)插入到當前的有序區,使得插入後仍保證該區間裡的記錄是按關鍵字有序的操作稱第i-
1趟直接插入排序。
排序過程的某一中間時刻,r被劃分成兩個子區間r[
1..i-
1](已排好序的有序區)和r[i..n](當前未排序的部分,可稱無序區)。
直接插入排序的基本操作是將當前無序區的第1個記錄r[i]插人到有序區r[
1..i-
1]中適當的位置上,使r[
1..i]變為新的有序區。因為這種方法每次使有序區增加1個記錄,通常稱增量法。
插入排序與打撲克時整理手上的牌非常類似。摸來的第1張牌無須整理,此後每次從桌上的牌(無序區)中摸最上面的1張並插入左手的牌(有序區)中正確的位置上。為了找到這個正確的位置,須自左向右(或自右向左)將摸來的牌與左手中已有的牌逐一比較
1.演算法描述
void lnsertsort(seqlist r)
while(r[0].key//
當r[i].key≥r[j].key
時終止
r[j+1]=r[0];//r[i]
插入到正確的位置上
}//endif }
} 2、希爾(shell)排序
基本思想:
先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中。先在各組內進行直接插人排序;然後,取第二個增量d2重複上述的分組和排序,直至所取的增量dt=
1(dt,即所有記錄放在同一組中進行直接插入排序為止。
該方法實質上是一種分組插入方法。
shell排序的演算法實現
1.不設監視哨的演算法描述
void shellpass(seqlist r,
int d)
while(j>0&&r[0].key;
r[j+d]=r[0];
//插入
r[i]
到正確的位置上
} //endif
} //shellpass
void shellsort(seqlist r)
while(increment>1)
} //shellsort
注意:當增量d=
1時,shellpass和insertsort基本一致,只是由於沒有哨兵而在內迴圈中增加了乙個迴圈判定條件"j>0",以防下標越界。
二、交換排序
1、氣泡排序
具體演算法
void bubblesort(seqlist r)
if(!exchange) //
本趟排序未發生交換,提前終止演算法
return;
} //endfor(
外迴圈)
} //bubblesort
2、快速排序
快速排序是對氣泡排序的一種本質改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。在氣泡排序中,一次掃瞄只能確保最大數值的數移到正確位置,而待排序序列的長度可能只減少1。快速排序通過一趟掃瞄,就能確保以某個數為基準點的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。
顯然快速排序可以用遞迴實現,當然也可以用棧化解遞迴實現。
快速排序是不穩定的。最理想情況演算法時間複雜度o(nlog2n),最壞o(n2)
main()
quick_sort(int l,int first,int end)
}quick(int first,int end,int l)
l[left]=key;
return left;
}
iOS演算法總結 堆排序
堆 排序 很明顯,我們可以發現它們都是 二叉樹,如果觀察仔細些,還能看出它們都是 完全二叉樹。上圖中根節點是所有元素中最大的,右圖的根節點是所有元素中最小的。再仔細看看,發現左圖每個節點都比它的左右孩子要大,右圖每個節點都比它的左右孩子要小。這就是我們要講的堆結構。堆是具有下列性質的完全二叉樹 每個...
ios排序演算法
void bubblingaction 氣泡排序 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一...
iOS 演算法總結
1.不用中間變數,用兩種方法交換a 和 b的值 func arithmetic1 func swap11 a inout int,b inout int func swap22 a inout int,b inout int func swap33 a inout int,b inout int 2...