氣泡排序(升序)時間複雜度分析
原理:透過從前往後遍歷兩兩對比,
當前一個數大於後一個數,則交換位置,
最大的數可以遍歷到最右側
不斷從後縮小陣列範圍(end--),當end到第一個元素時停止
void Swap(int*a,int *b){
int tmp=*b;
*b=*a;
*a=tmp;
}
void BubbleSort(int * arr,int n){
assert(arr);
for(int EndIndex=n-1;EndIndex>0;EndIndex--)
{
for(int i=1;i<=EndIndex;i++)
{
if(arr[i-1]>arr[i])
Swap(arr+i-1,arr+i);
else
continue;
}
}
}
從中可以看出,外部迴圈了陣列大小n次,而每一次內部迴圈次數
分別為n-1,n-2,n-3,...,0,等差數列相加得到(n-1)*n/2,
- 最差時間複雜度:O(N^2)
- 最佳時間複雜度:O(N)