一、算法原理
?
1、比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。
3、針對所有的元素重復以上的步驟,除了最后一個。
4、持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
?
二、算法分析
?
平均時間復雜度:冒泡排序最好為O(n)?,最壞為O(n2),平均時間復雜度為O(n2)
空間復雜度:O(1) ?(用于交換)
?
三、算法穩定性
?
?
四、冒泡排序有兩個很明顯的優勢
1.“編程復雜度”很低,很容易寫出代碼;
2.具有穩定性,這里的穩定性是指原序列中相同元素的相對順序仍然保持到排序后的序列,而堆排序、快速排序均不具有穩定性。 ?
五、C#冒泡排序算法


//冒泡排序

void BubbleSort(int array[],int n)

{int i=0; int j=0; int temp=0;int flag = 0;for(i=0;i<n - 1 ;i++) /*外循環控制排序的總趟數*/
{flag = 0; /*本趟排序開始前,交換標志應為假*/for(j=n-1;j > i;j--) /*內循環控制一趟排序的進行*/
{ if(array[j] < array[j-1] ) /*相鄰元素進行比較,若逆序就交換*/ { temp =array[j]; array[j] = array[j-1]; array[j-1] = temp; flag = 1; /*發生了交換,故將交換標志置為真*/ } } if (flag == 0) /*本趟排序未發生交換,提前終止算法*/ break; /* printf("第%d趟排序結果: \\n",i+1); PrintArray(array,n); */ } }
?
算法的應用


//打印數組

void PrintArray(int array[] , int n)

{int i;for(i=0;i<n;i++)printf(" %d ",array[i]);printf("\\n");
}void TestBubbleSort()
{int array[8] ={38,20,46,38,74,91,12,25};BubbleSort(array,8);PrintArray(array,8);
}
?
輸出形式
?
第1趟?? 第2趟? 第3趟?? 第4趟?? 第5趟?? 第6趟?? 第7趟
12????? 12????? 12????? 12????? 12????? 12????? 12?????????????????????????????
38????? 20????? 20????? 20????? 20????? 20????? 20
20????? 38????? 25????? 25????? 25????? 25????? 25
46????? 25????? 38????? 38????? 38????? 38????? 38
38????? 46????? 38????? 38????? 38????? 38????? 38
74????? 38????? 46????? 46????? 46????? 46????? 46
91????? 74????? 74????? 74????? 74????? 74????? 74
25????? 91????? 91????? 91????? 91????? 91????? 91 ?