起泡演算法的最佳複雜度O(N)
阿新 • • 發佈:2018-12-15
//起泡法,大數沉底 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char a[1000]; gets(a); int k=strlen(a); for(int i=0;i<k-1;i++)//趟 { for(int j=0;j<k-1-i;j++)//比較次數:k-i { if(a[j]>a[j+1]) { char temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } printf("%s \n",a); } printf(" \n"); } printf("%s",a); system("pause"); return 0; }
引用:
http://www.cnblogs.com/melon-h/archive/2012/09/20/2694941.html
可是網上和許多書上都寫道是O(n),不知是否有人能幫我解答一下呢? 2.4 在Stackoverflow上問到答案了。 我原本的程式碼的時間複雜度確實應該是O(n^2),但演算法可以改進,使最佳情況時為O(n)。改進後的程式碼為: 複製程式碼 public void bubbleSort(int arr[]) { boolean didSwap; for(int i = 0, len = arr.length; i < len - 1; i++) { didSwap = false; for(int j = 0; j < len - i - 1; j++) { if(arr[j + 1] < arr[j]) { swap(arr, j, j + 1); didSwap = true; } } if(didSwap == false) return; } } 複製程式碼