冒泡排序: O(n^2)時間復雜度,穩定排序
冒泡排序就是把小的元素往前調或者把大的元素往后調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,我想你是不會再無聊地把他們倆交換一下的;如果兩個相等的元素沒有相鄰,那么即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前后順序并沒有改變,所以冒泡排序是一種穩定排序算法。
void
swap(int *a, int *b) /* precondition: pointer a and b can't be the same */
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
void
bubble_sort(int *array, int len)
{
int i, j;
for(i=0; i<len-1; ++i) {
for(j=len-1; j>i; --j) {
if(array[j-1] > array[j])
swap(array+j-1, array+j);
}
}
}