ACM 基本排序演算法,歸併排序(求逆序對)

2021-10-09 21:27:32 字數 2759 閱讀 7446

主要運用到的的思想:分治、遞迴

功能:1.陣列進行排序。

2.計算陣列中的逆序對的個數。

時間複雜度:穩定的o(nlogn)

空間複雜度:o(n)

附上模板**:

#

include

using

namespace std;

long

long

merge

(int a,

int b,

int s,

int m,

int e)

}while

(i<=m)

b[k++

]=a[i++];

while

(j<=e)

b[k++

]=a[j++];

for(

int n=s;n<=e;n++

) a[n]

=b[n]

;return ans;

}void

mergesort

(int a,

int b,

int s,

int e)

}int a[

100005];

int b[

100005];

intmain()

mergesort

(a,b,

1,n)

;for

(int i=

1;i<=n;i++

)return0;

}

主要思想:不斷交換相鄰兩個逆序的元素。最終將最大排在最後,類似於可樂冒泡。

時間複雜度:o(n²)

空間複雜度:o(n)

#

include

using

namespace std;

void

bubblesort

(int a,

int n)}}

}int a[

100005];

intmain()

bubblesort

(a,n)

;for

(int i=

1;i<=n;i++

)return0;

}

主要思想:通過與n次(n為陣列的長度)的選擇,可以將每次當前為選擇的最大(最小)的元素放在相應位置上。

時間複雜度:o(n²)

空間複雜度:o(n)

#

include

using

namespace std;

void

selectsort

(int a,

int n)

}int t=a[min]

; a[min]

=a[i]

; a[i]

=t;}

return;}

int a[

100005];

intmain()

selectsort

(a,n)

;for

(int i=

1;i<=n;i++

)return0;

}

主要思想:兩層for迴圈,第一層表示接下來要將前i個排好序,第二個for迴圈,用於通過比較判斷第i個元素應該放在1~i的哪個位置上

時間複雜度:o(n²)

空間複雜度:o(n)

#

include

using

namespace std;

void

insertsort

(vector<

int>

&a,int len)

else}}

return;}

intmain()

insertsort

(a,n)

;for

(int i=

0; i++i)

return0;

}

主要思想:可以認為是插入排序的plus版,內部多了有個增量因子(i=3*i+1),作為每輪插入排序中第二個for『迴圈每次結束後的增加量

時間複雜度:o(n^1.5)左右

空間複雜度:o(n)

#

include

using

namespace std;

typedef

long

long ll;

const

int maxn =

100005

;int a[maxn]

,n;void

insertionsort

(int a,

int n,

int g)

else

break;}

a[j+g]

=temp;}}

void

shellsort

(int a,

int n)

for(

int i=g.

size()

-1;i>=

0;i--)}

intmain()

shellsort

(a,n)

;for

(int i=

1;i<=n;i++

)return0;

}

ACM 歸併排序

descript 歸併排序 author chenzx include using namespace std const int n 7 void print arry int arry,int len else 2.將剩餘的部分新增到臨時陣列中 while first1 mid while fi...

基本演算法 歸併排序

歸併排序 是一種較穩定的排序演算法 時間複雜度 nlogn 基本思想 將乙個陣列進行拆分成兩兩一組,然後分別對每組進行排序組合。基本演算法 將有二個有序數列a first.mid 和a mid.last 合併。void mergearray int a,int first,int mid,int l...

基本排序演算法 歸併排序詳解

歸併排序的核心就是將待排序元素先不斷分割直至不可分割,然後左右合併歸一。本質上是分治和遞迴的使用。話不多說,直接上 include includeusing namespace std class solution else 迴圈結束表示某乙個走完了,剩下的直接放入尾部 while i mid wh...