1. 程式人生 > >起泡演算法的最佳複雜度O(N)

起泡演算法的最佳複雜度O(N)

//起泡法,大數沉底

#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;
}




引用:

氣泡排序最佳情況的時間複雜度,為什麼是O(n)

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;
    }    
}
複製程式碼