12 六筆資料 9、12、3、25、34、90,以氣泡排序法(bubble sort),由大到小排序,請問總共需要比較多少次?
(A)5
(B)10
(C)15
(D)20
統計: A(58), B(39), C(145), D(9), E(0) #909277
詳解 (共 4 筆)
#include
void bubble_sort(int nums[], int length)
{
int cc=0;
for(int i=length-1; i>=0; i--){
int has_sorted = 0;
for(int j=0; j;>
if(nums[j] < nums[j+1]){
// swap elements
cc+=1;
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
has_sorted = 1;
}
}
if(has_sorted == 0){
break;
}
}
printf("\n比對次數:%d\n\n",cc);
}
void print_array(int nums[], int length)
{
for(int i=0; i;>
printf("%d ", nums[i]);
}
printf("\n");
}
int main()
{
int nums[6] = {9, 12, 3, 25, 34, 90};
printf("before sorting:\n");
print_array(nums, 6);
// call bubble sort function
bubble_sort(nums, 6);
printf("after sorting:\n");
print_array(nums, 6);
return 0;
}
------------------------------------------------
執行結果(大到小排序):
Success #stdin #stdout 0s 4360KB
before sorting: 9 12 3 25 34 90
比對次數:13
after sorting: 90 34 25 12 9 3
--------------------------------------------
習慣算法是從左至右寫起
雖然這題可能也猜得出是15次
因為他從右至左開始排序
9 , 12 , 3 , 25 , 34 , 90
90 , 9 , 12 , 3 , 25 , 34 ----交換5次
90 , 34 , 9 , 12 , 3 , 25 ----交換4次
90 , 34 , 25 , 9 , 12 , 3 ----交換3次
90 , 34 , 25 , 12 , 9 , 3 ----交換1次
------------------------------------------
共交換15次