演算法思想:每次將剩餘的最大的關鍵碼,逐步上公升放在最後乙個位置,類似於冒泡。
#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 ...