Re: [問題] 泡泡排序法 用double定義資料型態 無法 …
用推的沒很方便,發個文修一下
※ 引述《Adee (Adee)》之銘言:
: 當我改回用float來定義資料型態時
可能要了解 double / float 在 printf / scanf 時的引數型態
double x;
scanf("%lf", &x), printf("x=%lf\n", x);
上面是小寫的 LF,而非 ONE-F。
float y;
scanf("%f", &y), printf("y=%f\n", x);
-----
我沒記錯的話,scanf 才有必要區分 %lf 與 %f
printf 可不必區分,但認為好的習慣是,不論 printf / scanf 都用 %lf / %f 區分。
----
原本的程式碼有不少問題,(扣掉 VLA 方式使用是個爭議點),全都犯在同一點:
當宣告為 int A[100] 時,實際可以用的範圍是 A[0]~A[99],不可用到 A[100]
也就是說,當宣告成 double num[SIZE] 時,可用範圍是 num[0]~num[SIZE-1],
所以 loop 、array index 邊界通常會再特別注意到,
下面有問題的地方標過
scanf("%d", &SIZE);
double num[SIZE];
for(k=1; k<=SIZE; k++) scanf("%f", &num[k]); /* 這段全錯 */
/* 改成這樣 - for(k=0; k<SIZE; k++) scanf("%lf", &num[k]); */
for(i=1; i<=SIZE; i++)
for(j=i; j<SIZE; j++)
if(num[i]>num[j+1]) num[i] = num[i]; /* i=SIZE 時,num[SIZE] 違規 */
else {
temp = num[j+1]; /* j=SIZE-1時 num[j+1] 違規 */
num[j+1]=num[i]; /* j=SIZE-1時 num[j+1] 違規 */
num[i]=temp;
}
不知是不是我誤會,我以為這比較像 Select Sorting,
Bubble Sorting 是相鄰兩個元素在做比較方式排序。
----
原程式碼有些動作雖有些多餘,此處一起改過
修改後大致如下
scanf("%d", &SIZE);
double num[SIZE];
for(k=0; k<SIZE; k++) scanf("%lf", &num[k]);
for(i=0; i<SIZE-1; i++)
for(j=i+1; j<SIZE; j++)
if(num[i] < num[j]) { /* 只要寫一個 if 就行了 */
temp = num[i]; /* 做交換動作 */
num[i] = num[j];
num[j] = temp;
}
一開始不熟的話,我建議把 i, j 邊界值都帶入 array 裡面,看有沒有超界。
i=0 , num[i]=num[0] , 合法
i=SIZE-2 , num[i]=num[SIZE-2] , 合法
j=i+1 , num[j]=num[i+1]
if i=0 , num[i+1]=num[1] , 合法
if i=SIZE-2 , num[i+1]=num[SIZE-1], 合法
其他排序法邏輯若有問題,就先看看書吧。
--
When I saw the turth of love,
I feel the pain which the world brings to me.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.78.41
→
08/13 14:11, , 1F
08/13 14:11, 1F
→
08/13 14:11, , 2F
08/13 14:11, 2F
→
08/13 14:12, , 3F
08/13 14:12, 3F
→
08/13 14:12, , 4F
08/13 14:12, 4F
→
08/13 14:12, , 5F
08/13 14:12, 5F
※ 編輯: tropical72 來自: 180.177.78.41 (08/13 14:13)
→
08/13 14:14, , 6F
08/13 14:14, 6F
推
08/13 14:32, , 7F
08/13 14:32, 7F
→
08/13 14:33, , 8F
08/13 14:33, 8F
→
08/13 14:33, , 9F
08/13 14:33, 9F
→
08/13 22:37, , 10F
08/13 22:37, 10F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章