氣泡排序:
#include using namespace std;
//氣泡排序,時間複雜度o(n^2),穩定,比較次數最少n-1,最多n*(n-1)/2
void bubble_sort(int *list,int num)}}
}int main()
; bubble_sort2(arraylist,len);
for(int i=0;i快速排序
#include #include using namespace std;
//快速排序,最多比較n*(n-1)/2次,順序或者逆序時比較次數最多,不穩定
//最壞情況下,時間複雜度為o(n^2)
//最優情況下,時間複雜度o(nlogn)
//平均複雜度o(nlogn)
void quick_sort(int *data, int low, int high)
int i = low;
int j = high;
int temp = data[low];
while(i!=j)
//將第i個值放到對應的位置
data[j + 1] = temp;
}}int main()
; insert_sort(a,len);
for(int i = 0; i < len; i++)
return 0;
}
選擇排序:
#include #include using namespace std;
//選擇排序,不穩定,時間複雜度o(n^2)
//比較次數固定n(n-1)/2次
void select_sort(int *data,int num)
}swap(data[i],data[minindex]);
}}int main()
; select_sort(a,len);
for(int i = 0; i < len; i++)
return 0;
}
希爾排序:
#include #include using namespace std;
//希爾排序,時間複雜度o(n^2),不穩定
//最多比較n^1.5次
void shell_sort(int *data, int n)
data[j+increment]=temp;
}increment/=2; // 增量變為原來的一半
}}int main()
; shell_sort(a,len);
for(int i = 0; i < len; i++)
return 0;
}
歸併排序
#include #include #include using namespace std;
//歸併排序的最壞時間複雜度為o(nlogn),穩定
//歸併排序輔助函式,用於對左右有序的陣列進行合併
void merge(int* data, int l,int r,int *templist)
else
}while(j<=mid)//左半部分剩餘元素依次複製到臨時陣列中
while(k<=r)//若右邊有剩餘元素
for(i=l;i<=r;i++)
}void merge_sort(int* data,int l,int r,int *templist)
}int main()
; int templist[len];
memset(templist,0,sizeof(int)*len);
merge_sort(a,0,len-1,templist);
for(int i = 0; i < len; i++)
return 0;
}
Dinic演算法例子
寫法 1 用鄰接矩陣儲存各個流的起點終點 2 用bfs把圖分出層次 記錄到各個點需要流幾次 3 用dfs對圖找出增廣路進行流量擴充 注意反向流要記錄成容量為0的路徑,更新正向流時也要更新反向流 教材361頁 includeusing namespace std struct edge edge ed...
分治演算法 例子
分治策略 將問題分解成若干個小的子問題,每個子問題與大問題同型 所以裡面可以用遞迴 但規模更小 遞迴解決這些子問題 將子問題的解答合併,獲得大問題的解答 最大欄位和問題 include include include using namespace std int a 100 int maxsum ...
Python實現氣泡排序演算法 例子解釋
氣泡排序 顧名思義就是 較小的值 像泡泡一樣往上冒,大的值 往下沉。實現原理 依次將相鄰兩個數值進行比較,較小的數值移到左邊,較大的數值移到右邊,依次比較完第一輪後,最大的數值應該排在最右邊。然後再繼續重複的比較,直至無數值需要交換,此時排序完成。例子解釋 無序列表arr 7,6,5,3,9,2,8...