3.3選擇排序
由前文可知,交換排序的特點是每次用當前的物件一一與其後物件比較並交換。選擇排序與交換排序類似,但是它並不是用當前物件與其後物件一一比較,而是直接以當前物件以後的最小物件與當前物件比較並交換,因而可以提高演算法的時間效能。
void csortdlg::onselectionsort()
//選擇排序
for(i=0;i
}if(ipos!=i)
else
dc.textout(objectcoord[sortobject[objectname[ipos]].iseq].x-15,
objectcoord[sortobject[objectname[ipos]].iseq].y-30,
strnum);
//物件i
strname.format("%d",sortobject[objectname[i]].iname);
dc.textout(objectcoord[sortobject[objectname[i]].iseq].x-5,
objectcoord[sortobject[objectname[i]].iseq].y-8,
strname);
if(sortobject[objectname[i]].inumber<1000)
else
dc.textout(objectcoord[sortobject[objectname[i]].iseq].x-15,
objectcoord[sortobject[objectname[i]].iseq].y-30,
strnum);
//延遲1秒進行下一次排序以便將排序過程顯示為動畫
sleep(1000);
}}
}下面是我們追蹤所得的一次選擇排序的軌跡:
5919 280 1617 4375 332 1467 158 9599 342 496
158 280 1617 4375 332 1467 5919 9599 342 496
158 280 332 4375 1617 1467 5919 9599 342 496
158 280 332 342 1617 1467 5919 9599 4375 496
158 280 332 342 496 1467 5919 9599 4375 1617
158 280 332 342 496 1467 1617 9599 4375 5919
158 280 332 342 496 1467 1617 4375 9599 5919
158 280 332 342 496 1467 1617 4375 5919 9599
下面的動畫(gif格式)演示了選擇排序的過程:
選擇排序法總的比較次數是
n(n-1)/2
次,但其交換次數有所減少。最壞情況下的交換次數接近於比較次數,為〔
n2/ 4+3(n-1)
〕;平均情況下交換次數為〔
n*ln(n+u)
〕,其中
u 是尤拉常數,約為
0. 577216
。
從趣味遊戲到排序演算法 4
3.3選擇排序 由前文可知,交換排序的特點是每次用當前的物件一一與其後物件比較並交換。選擇排序與交換排序類似,但是它並不是用當前物件與其後物件一一比較,而是直接以當前物件以後的最小物件與當前物件比較並交換,因而可以提高演算法的時間效能。void csortdlg onselectionsort 選擇...
3D遊戲從入門到精通 4
2.10.1平面的表示 3d空間裡的物體都是實體的,主要由平面組成。比如正方體,就有6個平面。在d3d裡組成三維物體的基本平面是三角形,無論是多麼複雜的物體,都是有三角形組成的。並且d3d裡支援顯示最小的圖形也是三角形,它是沒有點和直線顯示的。因此,要顯示正方體,就需要把每個平面分成兩個三角形,才能...
排序演算法從入門到精通之二 氣泡排序
氣泡排序是最樸素的排序演算法。其過程就像燒水過程一樣,大的水泡從壺底一步一步冒出來,直到水面以上。其基本思想是 1.掃瞄整個陣列,若陣列長度為n,第一趟掃瞄過程中,下標j從0到n 2,依次比較arr j 與 arr j 1 若前者大於後者交換這兩個元素。2.第一趟掃瞄完成後,最大的那個元素已經放到陣...