排序雜談(持續更新中)

2021-08-29 18:41:56 字數 2130 閱讀 6686

排序,是一種很實用的演算法,在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...