㈠ 設計演算法,將3個數按從大到小的順序排列。(高中演算法初步)
設3個數順序表示為a,b,c;順開始進行比較:
1、如果a大於等於b,則順底不變,即a,b,c;(1)
如果a小於b,則將a與b變位置互換,即b,a,c;(2)
2、用第二個數與第三個比較,
按(1):
如果b大於等於c,則順底不變,即a,b,c;(完成)
如果b小於c,則b與c變位置互換,即a,c,b;(3)
按(2):
如果a大於等於c,則順底不變,即b,a,c;(完成)
如果a小於c,則a與c變位置互換,即b,c,a;(4)
(冒泡排序法第一輪完成)
第二輪:
按(3):
如果a大於等於c,則順底不變,即a,c,b;(完成)
如果a小於c,則a與c變位置互換,即c,a,b;(完成)
按(4):
如果b大於等於c,則順底不變,即b,c,a;(完成)
如果b小於c,則a與c變位置互換,即c,b,a;(完成)
㈡ C語言,快速排序演算法
0和N-1表示的是數組下標。快排每一趟排序的目的是使值比設定的key值小的數都排到數組前部分,大的都排到後部分;然後對這兩部分用新的關鍵值key分別重復上一步的操作;遞歸,直到數組有序。
其中關鍵值key=a[low]。
用題目給定的數組模擬第一趟排序如下:
下標0123456789
值91647824661232551
low=0high=9
part_element=a[low]=9
進入for循環
進入第一個while
part_element<51,於是high--,high=8;
part_element<25,high--,high=7;
part_element>3,不滿足,結束while
a[low]=a[0]=a[high]=a[7]=3,low++,low=1;
進入第二個while
part_element<16,不滿足,結束while
a[high]=a[7]=a[low]=a[1]=16,high--,high=6
for第一個循環結束,數組如下
316478246612162551
low=1,high=6
for第二個循環同上,結束時數組如下
344782476612162551
low=2,high=3
for第三個循環,第一個while中high--以後,low==high,直接break跳出for循環,此時
344782476612162551
low=2,high=2
結束for以後
a[high]=a[2]=part_element=9,得到
34982476612162551
split函數returnhigh=2
quicksort函數中middle=2;
下面兩句遞歸,仍然是調用split函數,對數組
0-2,3-9兩部分分別重復上述操作
最後直到數組數據有序