一.選擇排序
1.概念:每次從無序的子陣列裡面選擇最小的數,放在有序區的後面(既與無序區的首元素交換);不穩定排序;時間複雜度o(n^2);輔助儲存o(1)
2.**實現
int selection_sort(int *a,int len) //len為陣列元素個數
二.氣泡排序
1.概念:重複訪問數列n-1次,每次比較相鄰的兩個元素,若順序不對則交換兩個元素;穩定排序;時間複雜度o(n^2);輔助儲存o(1)
2.**實現
int bubble_sort(int *a,int len)
} return 0;
}
3.舉例
int main()
; bubble_sort(a,8);
for(int i=0;i<8;i++)
cout
}
結果
三.直接插入排序
1.概念:每次從無序表中取出第乙個元素,把它插入到有序表的合適位置,使有序表仍然有序,重複n-1次;穩定排序;時間複雜度o(n^2);輔助儲存o(1)
2.實現**
四.快速排序
1.概念:通過一趟遞迴使陣列分為兩個自子陣列,一部分的元素都比父陣列最後乙個人元素小,一部分元素都比父陣列的最後乙個元素大,這樣遞迴下去,直到子陣列的元素個數為2;不穩定排序;平均時間複雜度o(nlogn);最壞情況時間複雜度o(n^2),當陣列本來就有序時;儲存輔助o(logn)
2.**實現
int patition(int *a,int p,int r)
3.舉例
五.歸併排序
1.概念:把乙個陣列分成兩個子陣列,分別對兩個子陣列進行排序,然後合併兩個子陣列,使整個陣列有序,如此遞迴下,直到子陣列元素個數為2;穩定排序;時間複雜度o(nlogn);儲存輔助o(n)
2.**實現
六.堆排序
1.概念利用最大堆設計的一種排序演算法,利用陣列的特點快速定位指定索引的元素;
不穩定排序;時間複雜度o(nlogn);儲存輔助o(1)
2.**實現
int max_heapify(int *a,int i,int len) //維護最大堆 len待排陣列元素個數
return 0;
}int bulid_max_heapify(int *a,int len) //建最大堆
int heap_sort(int *a,int len) //堆排序
return 0;
}3.舉例
七.shell(希爾)排序
1.概念:先將整個待排序列分割為若干個子串行分別進行直接插入排序,直到整個序列"基本有序"時,在對全體進行一次直接插入排序。不穩定排序,時間複雜度o(n^s) 1
2.實現**
int shell_sort(int *a,int len)
} return 0;
}3.舉例
八.計數排序
1.概念:將陣列a的每個元素作為另乙個輔助陣列b的下標,統計出a每個元素出現的次數,從而確定出a的每個元素在排序後的陣列中所處的位置;穩定排序;時間複雜度o(n+k);儲存輔助o(n+k)
2.實現**
int counting_sort(int *a,int len,int k) // k大於陣列中最大數
for(int i=0;i3.舉例
常見排序演算法
1 插入排序 直接插入排序,是一種最簡單的排序方法,它的基本操作是將乙個記錄插入到已排好序的有序表中,從而得到乙個新的 記錄數增1的有序表。初始 38 65 27 76 13 i 1 13 選13為監視哨並假設為乙個有序序列 i 2 13 38 待插入元素38 13 i 3 13 38 65 待插入...
常見排序演算法
排序演算法作為常用的基本演算法,今天就來總結一下各種經典排序演算法,這裡只貼出 對演算法的文字描述可以在課本或其它部落格上找到很多詳盡的敘述,這裡直接上 而不是常見演算法書上的偽 希望對正在努力學資料結構與演算法的朋友們有幫助 1 氣泡排序 void bubblesort t a,int n if ...
常見排序演算法
最優 o n 最差 o n 2 平均 o n 2 空間 o 1 穩定排序 插排的思路是保證遍歷到每個元素時,該元素前面的序列都是有序的。基於這個前提,我們將遍歷到的新元素和它前面的序列相比對,然後將這個元素插入到適當的位置,使得這個包含新元素的序列也是有序的。雖然外層遍歷只要o n 時間,但是因為找...