排序演算法彙總

2021-10-01 14:47:57 字數 3786 閱讀 6328

演算法思想:每次將剩餘的最大的關鍵碼,逐步上公升放在最後乙個位置,類似於冒泡。

#include

using

namespace std;

#define max 1001

int n,a[max]

;void

bubblesort()

}}}int

main()

改進版氣泡排序:
#include

using

namespace std;

#define max 1001

int n,a[max]

;void

bubblesort()

}if(num==0)

break;}

}int

main()

演算法思想:每次選擇剩餘中最小的直接放到放到最前面

#include

using

namespace std;

#define max 10001

int n,a[max]

;void

select()

}swap

(a[i]

,a[tmp]);

}}intmain()

時間複雜度:o(n2)

空間複雜度:o(1)

演算法思想:再前面的序列有序的情況下,不斷將新的關鍵碼放入

#include

using

namespace std;

#define max 1001

int n,a[max]

;void

insertsort()

else

break;}

}for

(int i=

1;i<=n;i++

) cout<<<

" ";

}int

main()

時間複雜度:o(n2)

空間複雜度:o(1)

基於插入排序,插入排序在資料基本有序的情況下複雜度大大降低,這是將序列分為n/k組,每組進行插入排序,然後逐漸縮小k,直到k=1完成。

#include

using

namespace std;

#define max 1001

int n,a[max]

;void

shellsort()

}}}for

(int i=

1;i<=n;i++

) cout<<<

" ";

}int

main()

時間複雜度:nlog2n ~ o(n2)

空間複雜度:o(1)

#include

using

namespace std;

#define max 1001

//歸併排序

//原理:將兩個有序的序列合併只需o(n)的時間複雜度

// 遞迴將序列分為兩部分,當元素個數為1時開始合併

// 遞迴回溯將分開的序列合併,在子串行有序的前提下合併

int n,a[max]

,tmp[max]

;//合併操作

void

merge

(int l,

int mid,

int r)

else tmp[

++cnt]

=a[j++];

}while

(i<=mid) tmp[

++cnt]

=a[i++];

while

(j<=r) tmp[

++cnt]

=a[j++];

for(

int i=l;i<=r;i++)}

//遞迴劃分

void

mergesort

(int first,

int last)

intmain()

//複雜度分析

//空間複雜度:需要引用同樣儲存空間的輔助陣列tmp,為o(n)

//時間複雜度:需要log n 趟排序,合併為o(n),這是最好、最壞的時間複雜度

#include

using

namespace std;

#define max 10001

//快速排序

//以乙個數字為基準,小於其的放在左邊,大於其的放右邊

//然後再遞迴基準左邊、右邊

int n,a[max]

;int

geti

(int l,

int r)

while

(i) i++;if

(i}return i;

}void

quicksort

(int l,

int r)

intmain()

時間複雜度:o(nlog2n ~ n2)

空間複雜度:o(1)

#include

using

namespace std;

int a[

10001

],n;

//演算法:堆排序

//大根堆:子節點小於父節點

//堆排序分為兩部分 建堆、出堆

void

shift

(int i,

int last)

//調整堆}}

void

build()

}}void

heapsort()

}int

main()

時間複雜度:o(n log2n)~ n2

空間複雜度:o(1)

對關鍵碼進行分配與收集的思想進行排序

#include

using

namespace std;

#define max 1001

struct node

;int n,maxx,tmp,cnt;

node*

radixsort

(node *first,

int cnt)

else

first=first-

>next;

}for

(int j=

0;j<=

9;j++

)else

rear=tail[j];}

} rear-

>next=

null

; base*=10

;}node *p=first;

return first;

}int

main()

maxx=

max(tmp,maxx);}

rear=rear-

>next=

null

;while

(maxx)

first=

radixsort

(first,cnt)

; p=first;

while

(p!=

null

) cout<}

時間複雜度:近乎線性o(n+m)

空間複雜度:o(m)

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...