排序,是一種很實用的演算法,在noip普及組中十分常考。
有n個數要從小到大排序,n<=1000,最大的數為m且m<=100000思路
每次列舉兩個數,若a[i]>a[j]則交換兩數
最優時間複雜度,o(n)
最壞時間複雜度,o(n2)
平均時間複雜度,o(n2)
**
#include
using
namespace std;
int i,j,k,m,n,a[
10005];
void
init()
void
bubble_insert()
void
out(
)int
main()
思路
每次迴圈,在有序的a陣列中尋找t[i]可以放在哪,並插入。
最優時間複雜度,o(n)
最壞時間複雜度,o(n2)
平均時間複雜度,o(n2)
**
#include
using
namespace std;
int i,j,k,m,n,a[
10005
],t[
10005];
void
init()
void
insert_sort()
}void
out(
)int
main()
使用二分查詢改進後的**
#include
using
namespace std;
int i,j,k,m,n,a[
10005
],t[
10005];
void
init()
void
insert_sort()
for(k=i;k>=r+
1;k--
) a[k]
=a[k-1]
; a[l]
=t[i];}
}void
out(
)int
main()
思路
每次都迴圈找到t陣列中最小數,將這個數加入a陣列中,然後將這個數置最大(即刪除此數)
最優時間複雜度,o(n2)
最壞時間複雜度,o(n2)
平均時間複雜度,o(n2)
**
#include
#define inf 200000
using
namespace std;
int i,j,k,m,n,a[
10005
],t[
10005];
void
init()
void
select_sort()
}void
out(
)int
main()
思路
每次輸入資料時,用桶(也就是乙個陣列)給資料計數,最後從小到大迴圈一遍桶答案就出來了,所以桶十分方便。
注:若資料較大,開桶有可能會爆,而且有負數的情況桶也不方便。
最優時間複雜度,o(n)
最壞時間複雜度,o(m)
平均時間複雜度,o(n)
**
#include
using
namespace std;
int i,j,k,m,n,a[
100005];
void
init()
}void
out()}
intmain()
Javascript排序演算法(持續更新中 )
最近研究排序演算法 1.氣泡排序 bubble sort 適合資料規模很小的時候 氣泡排序最壞情況的時間複雜度是o n 穩定 function bubble arr console.log arr 2.直接插入排序 straight insertion sort 的做法是 每次從無序表中取出第乙個元...
排序方法 持續更新
在這個當中可以看出氣泡排序就是 第乙個數字與第二個數字進行比較,倘若第二個數字比第乙個數字大,則將兩個數字進行互換,接著第二個數字再與第三個數字進行比較,迴圈以往,第一次迴圈之後導致的結果就是最大的值處於最後面 這裡利用的是for迴圈的巢狀,首先倘若有n個數字,那麼在第一次迴圈中則需要迴圈n 1次 ...
排序演算法總結 持續更新
1.選擇排序法 1.選擇排序 o n2 穩定 template void selectionsort t arr,int n swap arr i arr minindex 2.插入排序法 2 插入排序 o n2 穩定,近乎有序的陣列時,效率很高 1.交換法 使用swap,效率較低 template...