18 {
19 temp = tempArray[j];
20 index = j;
21 }
22 }
23
24 //對(duì)w[i]排序
25 swapMemory = w[index];
26 w[index] = w[i];
27 w[i] = swapMemory;
28 }
29
30 return;
31 }
然而仔細(xì)對(duì)算法分析后可以發(fā)現(xiàn),“拿來(lái)主義”在這里用不上了!
對(duì)算法的測(cè)試用例是p[3] = {25, 24, 15};w[3] = {18, 15, 10}。得到的結(jié)果如下:
please input the total count of object: 3
Please input array of p :
25 24 15
Now please input array of w :
18 15 10
sortResult[i] is :
1 -107374176.000000 1 1.600000 2 1.600000
after arithmetic data: x[i]
0.000000 0.333333 0.000000
可以看到其效益為x[3] = {1.4, 1.6, 1.5},于是在M = 20的情況下,其預(yù)想中的輸出結(jié)果是0,1,0.5。然而事實(shí)上是不是就這樣呢?
當(dāng)程序進(jìn)入此函數(shù)經(jīng)過必要的變量初始化后,進(jìn)入了外圍循環(huán),也就是程序的第7行。第一輪循環(huán)中,temp = tempArray[0] = 1.4,index = i = 0;程序運(yùn)行到第15行,也就是進(jìn)入了內(nèi)層循環(huán)。
內(nèi)層循環(huán)的主要任務(wù)是從第i + 1個(gè)元素之后找到一個(gè)最大的效益并保存此時(shí)的下標(biāo)。到了第24行后,就開始對(duì)w[i]進(jìn)行排序。
問題就在這里了!排序后的w[i] = {1.6, 1.6, 1.5},因此對(duì)w[i]排序后就既改變了w[i]的原有順序,還改變了w[i]的原來(lái)值!
據(jù)此,做出一些修改,得到了如下的一段代碼:
1 void sort(float tempArray[], int sortResult[], int n)
2 {
3 int i = 0, j = 0;
4 int index = 0, k = 0;
5
6 for (i = 0; i < n; i++)//對(duì)映射數(shù)組賦初值0
7 {
8 sortResult[i] = 0;
9 }
10
11 for (i = 0; i < n; i++)
相關(guān)推薦:2011計(jì)算機(jī)等級(jí)二級(jí)C語(yǔ)言五套模擬試題及答案
計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言歷年真題匯總(2005-2010)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |