1樓:記憶水寒
最好的我選0之後分別是5 1 7 4 2
c++對9,1,8,2,7,3,6,4,5用二分法 排序成公升序!求寫法!求高人指教!~
2樓:夜神月
快速排序法(即是二分排序)的思想是,找到乙個值,要求這個值的左邊都是小於等於這個值的,右邊則大於等於這個值。
例如: int a[9]=
一步步演示如下:
設3個變數,i=0,j=8,fence=8 (都是下標)
i表示左邊開始的元素9的下標,j表示最右邊的元素5的下標,fence表示中間值的下標,初始為最右,即8。運作的時候i會往右靠,j會往左靠。
我們的目標是給數值5找乙個合適的位置,讓它滿足上述條件。
從0開始遞增,每個數都和5比較,如果找到乙個比5大的數,則和5交換位置。同時更新fence和i
執行後:a[9]= i = 1; fence = 0; (記住fence總是指示5所指的位置。)
從8開始遞減,每個數都和5比較,如果找到乙個比5小的數,則和5交換位置。更新fence 和j
執行後:a[9]= j = 6; fence =7;
3.執行1的步驟:
執行後:a[9]= i =3 ; fence =2;
4.執行2的步驟。
執行後:a[9]= j = 4 fence =5;
5.執行後a[9]= i = 5 fence =4;
至此判斷 i已經大於j 中斷迴圈 返回 fence的值,那麼經過一次排序後的結果就是a[9]=
5是選擇的中間值,排在下標為4的位置。
那麼用遞迴對 下標為0到3,下標為5 到8 分別執行同樣的排序就可以了。
這就是二分法的思想,即是快速排序。
**如下:#include #include
int partition(int *a, int l, int r)
l;while(l<=r)
r;}}return fence;
void quicksort(int *a, int l, int r)
int main()
quicksort(a,0,8);
for(int i=0;i<9;++i)
std::cout< 如果是聯通使用者,憑手機號碼前三位和後四位數字,無法查詢完整的某個聯通手機號碼資訊。您好!抄全國多座城市都擁有相同的手機號段,如 果沒有歸屬地資訊,後期查詢和提供給您的將是海量資訊,根本沒法篩查出準確號碼哦。所以需要手機號碼前三位和後四位,配合歸屬地資訊才能準確查詢中間四位號段哦。如果知道歸屬地的話... 中國移動 抄2g號段 134 135 136 137 138 139 150 151 152 158 159 bai3g號段du zhi157 182 187 188 147 上網本 中國dao聯通 2g號段 130 131 132 155 156 3g號段 185 186 中國電信 2g號段 13... 後三位只是序列號,每輛車的序列號不同。vin是英文vehicle identification number 車輛識別碼 的縮寫。sae標準規定 vin碼由位字元組成,所以俗稱十七位碼。它包含了車輛的生產廠家 年代 車型 車身型式及 發動機 及組裝地點等資訊。vin碼詳解。 位 wmi 製造廠 品牌...知道手機號碼的前三位跟後四位,如何查到中間的四位數字
中國手機號前三位都有哪些。要全喲分聯通跟移動的
車輛識別代號(車架號)後三位數是什麼