我有這個遞歸排序算法,我用於一項任務,我的老師說,有一個簡單的方式來提高我的算法的運行時間...但我無法弄清楚它是什麼,在所有。除非我錯了,算法的複雜性是O(n)?我不確定,因爲我們沒有學會如何計算類中遞歸方法的複雜性。這裏的代碼:如何改進已經是O(n)的遞歸排序算法?
public static void MyAlgorithm(int[] A, int n){
boolean done = true;
int j = 0;
while (j <= n - 2){
if (A[j] > A[j + 1]) {
swap(A,j,j+1);
done= false;
}
j++;
}
j = n - 1;
while (j >= 1){
if (A[j] < A[j - 1]) {
swap(A,j-1,j);
done=false;
}
j--;
}
if (!done)
MyAlgorithm(A, n);
else
return;
}
我能想到的唯一的事情就是增加一個if(done)return;在第一次循環之後,但它只能保存程序執行一些其他操作。哦,交換方法基本上只是:
public static void swap(int[] arr, int pos1, int pos2){
int temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;
}
在此先感謝您。
我建議使用描述性變量名稱。這實在很難理解。工業中避免使用單字母變量名稱。 – Jameson
這不是O(n) - 沒有任何O(n)排序算法。 – user93353
@ user93353無論如何不是基於比較的... –