shell數(shù)組的定義方法分為哪四種 常見的幾種排序算法?
常見的幾種排序算法?首先,冒泡排序一組無序數(shù)據a[1],a[2],...已知一個[n],需要按升序排列。首先,比較a[1]和a[2]的值。如果a[1]大于a[2],則兩者的值交換,否則保持不變。然后比
常見的幾種排序算法?
首先,冒泡排序
一組無序數(shù)據a[1],a[2],...已知一個[n],需要按升序排列。首先,比較a[1]和a[2]的值。如果a[1]大于a[2],則兩者的值交換,否則保持不變。然后比較a[2]和a[3]的值。如果a[2]大于a[3],交換兩者的值,否則保持不變。比較a[3]和a[4],以此類推,最后比較a[n-1]和a[n]的值。經過一輪這樣的處理后,a[n]的值必須是這組數(shù)據中最大的。如果a[1]~a[n- 1]在另一輪中以同樣的處理,a[n- 1]的值一定是a[1]~a[n-1]中最大的。然后a[1]~a[n-2]以同樣的進行一輪,以此類推。在處理n-1輪之后,a[1],a[2],...A [n]按升序排列。
優(yōu)點:穩(wěn)定;
缺點:慢,一次只能移動兩個相鄰的數(shù)據。
第二,選擇排序
每次行程從要排序的數(shù)據元素中選擇最小(或最大)的元素,順序放在排序后的數(shù)據序列的末尾,直到所有要排序的數(shù)據元素都排列好。
選擇性排序是一種不穩(wěn)定的排序方法。
n個記錄文件的直接選擇排序可以在n-1個直接選擇排序后得到一個有序的結果:
①初始狀態(tài):無序區(qū)為r [1...n],并且有序區(qū)域是空的。
②在第一次排序中,從無序區(qū)域R[1]中選擇具有最小關鍵字的記錄R[k]..n],并且它與無序區(qū)域中的第一個記錄R[1]交換,使得R[1..1]和R[2..n]分別變成增加一條記錄的新的有序區(qū)域和減少一條記錄的新的無序區(qū)域。
③第I次排序
在第I個排序開始時,當前有序區(qū)域和無序區(qū)域是R[1..i-1]和R(1≤i≤n-1)。這個排序從當前無序區(qū)中選擇關鍵字最小的記錄R[k],與無序區(qū)中的第一條記錄R交換,使R [1...I]和R分別成為增加一條記錄的新有序區(qū)和減少一條記錄的新無序區(qū)。
這樣,n個記錄文件的直接選擇排序就可以得到n-1個直接選擇排序后的一個有序結果。
優(yōu)點:移動數(shù)據的次數(shù)是已知的(n-1次);
缺點:比較太多。
第三,插入排序
一組數(shù)據a[1],a[2],...按升序排列的A [n]和一組無序數(shù)據b[1],b[2],...B [m]都是已知的,所以需要把它們組合成一個升序序列。首先比較b[1]和a[1]的值。如果b[1]大于a[1],則跳過。比較b[1]和a[2]的值。如果b[1]仍然大于a[2],繼續(xù)跳過,直到b[1]小于一個數(shù)組中的某個數(shù)據a[x]為止。到a[x]的原始位置,這就完成了b[1]的插入。B[2]~b[m]以同樣的插入。(如果有無數(shù)個組A,b[1]可以看作n1的數(shù)組A。)
優(yōu)點:穩(wěn)定快速;
缺點:比較的次數(shù)不一定相同。比較次數(shù)越少,插入點后移動的數(shù)據就越多,尤其是數(shù)據總量巨大的時候,而鏈表可以解決這個問題。
第四,縮小增量排序
由Hill于1959年提出,又稱Hill排序(殼排序)。
一組無序數(shù)據a[1],a[2],...已知一個[n],需要按升序排列。發(fā)現(xiàn)當n不大時,插入排序的效果很好。首先取一個增量d(dltn),列出a[1],a[1 d],A [12d]...作為第一組,還有一個[2],一個[2 d],一個[22d]...作為第二組,a[d],a[2d],a。
如何在linux服務器上用 PHP 執(zhí)行 python 腳本?
您可以將執(zhí)行python腳本視為執(zhí)行shell命令。
Php可以通過以下執(zhí)行shell命令:
1.字符串系統(tǒng)(string $command [,int amp$return_var])
exec ( string $command [,array amp$output [,int amp$return_var ]])
3.void passthru ( string $command [,int amp$return_var])