排序的演算法主要有兩種:比較排序與非比較排序
比較排序,時間複雜度o(nlogn) ~ o(n^2),主要有:氣泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序等。
非比較排序,時間複雜度可以達到o(n),主要有:計數排序,基數排序,桶排序等。
本文主要講解比較排序中的氣泡排序、選擇排序、插入排序
1、氣泡排序
它重複地遍歷過要排序的元素,依次比較相鄰兩個元素,如果他們的順序錯誤就把他們調換過來,直到沒有元素再需要交換,排序完成。越小(或越大)的元素會經由交換慢慢「浮」到數列的頂端。
2、選擇排序
初始時在序列中找到最小(大)元素,放到序列的起始位置作為已排序序列;然後,再從剩餘未排序元素中繼續尋找最小(大)元素,放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
3、插入排序
將一組資料分為有序序列和無序序列,一般將左邊定為有序序列,右邊為無序序列。對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。
**實現如下:
#include
using
namespace std;
class
sort
int*
buble()
;void
print()
;int
*selectsort()
;int
*insertsort()
;private
:int
*_a;
int num;};
void sort::
print()
}int
* sort::
buble()
//氣泡排序}}
return _a;
}int
* sort::
selectsort()
//選擇排序
if(minindex != i)
}return _a;
}int
* sort::
insertsort()
//插入排序
_a[j+1]
= temp;
}return _a;
}int
main
(int argc,
char
*ar**)
;int n =
sizeof
(a)/
sizeof
(a[0])
;
sort s
(a, n)
;
s.insertsort()
;
s.print()
;return0;
}
排序方法比較
根據排序的原則,內排序可以分為 預備知識 1.等差數列之和 s n a1 an 2 等比數列之和 s a1 1 q n 1 q 2.使用哨兵提高效率 比如基本的順序查詢我們可以這樣做 int search int a,int n,int key for int i 0 iif a i key ret...
各種排序方法的比較
簡單排序包括直接插入排序 氣泡排序 和簡單選擇排序。排序方法的穩定性 假設ki kj 1 i n,1 j n,i j 若在排序前的序列中ri領先於rj 即i 證明一種排序方法是穩定的,要從演算法本身的步驟中加以證明。證明排序方法是不穩定的,只需給出乙個反例說明。1 簡單排序法一般只用於n比較小的情況...
各種排序方法的綜合比較
各種排序方法的綜合比較 結論 排序方法 平均時間 最壞時間 輔助儲存 簡單排序 o n2 o n2 o 1 快速排序 o nlogn o n2 o logn 堆排序 o nlogn o nlogn o 1 歸併排序 o nlogn o nlogn o n 基數排序 o d n rd o d n rd...