title: 八大排序演算法
date: 2019-02-12 21:14:39
5. 選擇排序
6. 堆排序
7. 歸併排序
8. 基數排序
9. 八大排序時間複雜度比較
10. **
眾所周知,對於順序表,以二分法查詢乙個數,演算法時間複雜度為o(nlongn)
。因而,一次排好序,便可以節約很多查詢的時間。
由此可見,排序演算法尤為重要。以下介紹八大排序演算法,都是從小到大排序。
i從1
到n-1
,每次將第i位的數插入到前面已排好序的序列中。
插入的方法為:將i與i-1位置的數比較,i小則交換並i–,i大則停止插入。
// 插入排序
void
insertsort
(int
*num,
int n,
int start,
int grep)
}}
將以5 3 1為增量的序列依次進行插入排序。例如,增量為5時,對(a0,a5…)、(a1,a6…)、(a2,a7…)、(a3,a8…)、(a4,a9…)序列依次進行插入排序。
// 希爾排序
void
shellsort
(int
*num,
int n)
每次從0到i序列的數中挑取最大的數放在i位置,i從n-1
到0
。
挑取最大數的過程為:將j位置數與j+1位置比較,j大則交換,小不交換,j++。
// 氣泡排序
void
bubblesort
(int
*num,
int n)
}// 如果遍歷一次所有已經排好序,則不需要再排序了
if(allsort)
break;}
}
遍歷一次陣列,以第乙個數為標準,分成三部分,實現:第乙個數在中間,小於它的數在它前面,大於它的數在它後面。然後對前部分和後部分遞迴該操作,遞迴終點為陣列中個數為1。此處要注意的是,中間部分的數不需要再遞迴操作。
快排核心
遍歷一遍陣列,空間複雜度為o(1)
,將陣列分為三部分的方法為:
**:
// 快速排序
void
quicksort
(int
*num,
int n)
num[i]
= temp;
quicksort
(num, i)
;quicksort
(num+i+
1, n-i-1)
;// 此處不用再把pos位置的數傳進去排序了!!
}
每次從i到n-1個數中選最小的數放在i位置,i從0到n-1。
// 選擇排序
void
selectsort
(int
*num,
int n)
} num[pos]
= num[i]
; num[i]
= min;
}}
堆排序,又稱完全二叉樹排序。是將陣列看作一顆完全二叉樹,陣列i
位置的左右孩子分別為2*i+1
和2*i+2
位置。
排序過程為:
向下篩選:當結點兩個孩子的值比該結點的值大時,就交換結點與孩子位置。然後,對交換後的結點重複操作,直到兩個孩子的值都比該結點小,或孩子為空。
**:
// 堆排序中的篩選演算法
void
heapadjust
(int
*num,
int n,
int pos)
else
break;}
}// 堆排序(完全二叉樹排序)
void
heapsort
(int
*num,
int n)
// 交換第乙個和最後乙個,再對第乙個篩選
for(
int i=n-
1; i>
0; i--
)}
對於一段陣列先分兩半,各自進行歸併排序,再將兩半部分內容有序地合併起來,此時只需各遍歷一次即可,採用遞迴實現。遞迴的終結點是陣列中只有乙個數時則不需要進行上述操作。
// 歸併排序
void
mergersort
(int
*num,
int n)
else
k++;}
// i指標未到中間
while
(i// j指標未到結尾
while
(j// 將排序好的temp陣列賦給num
for(
int i=
0; i
) num[i]
= temp[i]
;free
(temp)
;}
在所有要排序的資料中找到最大的數,求出它的位數n。
建立編號從0到9的十個佇列。
i從最高位n到最低位1。
遍歷陣列將第i位為0的依次放入編號為0的佇列中,第i位為1的放入編號為1的佇列中。。。
所有數入相應佇列後,再依次將0到9編號佇列中數取出放回陣列中。
然後對低一位重複該操作。
// 基數排序
更多詳細**和時間複雜度比較,見github
八大排序演算法
1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...
八大排序演算法
一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...
八大排序演算法
排序的定義 輸入 n個數 a1,a2,a3,an 輸出 n個數的排列 a1 a2 a3 an 使得a1 a2 a3 an in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基數排序 桶排序...