1.二分查找
(A) [6 13 28 39 41 72 85] (20)
l=1 m=4 r=7
20<39, m-1=3=r
(B) [6 13 28] 39 41 72 85 (20)
l=1 m=2 r=3
20>13, m+1=3=l
(C) 6 13 [28] 39 41 72 85 (20)
l=m=r=3
20<28, m-1=2=r
l>r,二分法结束,l=3为插入位置
(D) 6 13 (20) 28 39 41 72 85
2、排序算法
冒泡排序:这是最原始,也是众所周知的最慢的算法了。倒序(最糟情况)
第一轮:10,9,8,7->10,9,7,8->10,7,9,8->7,10,9,8(交换3次)
第二轮:7,10,9,8->7,10,8,9->7,8,10,9(交换2次)
第一轮:7,8,10,9->7,8,9,10(交换1次)
循环次数:6次
交换次数:6次
初始关键字 [49 38 65 97 76 13 27 49]
第一趟排序后 13 [38 65 97 76 49 27 49]
第二趟排序后 13 27 [65 97 76 49 38 49]
第三趟排序后 13 27 38 [97 76 49 65 49]
第四趟排序后 13 27 38 49 [49 97 65 76]
第五趟排序后 13 27 38 49 49 [97 97 76]
第六趟排序后 13 27 38 49 49 76 [76 97]
第七趟排序后 13 27 38 49 49 76 76 [ 97]
最后排序结果 13 27 38 49 49 76 76 97
每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
初始序列:
i=1 [46] 58 15 45 90 18 10 62
↓
i=2 [46 58] 15 45 90 18 10 62
┌——┘
↓
i=3 [15 46 58] 45 90 18 10 62
┌——┘
↓
i=4 [15 45 46 58] 90 18 10 62
↓
i=5 [15 45 46 58 90] 18 10 62
┌—————┘
↓
i=6 [15 18 45 46 58 90] 10 62
┌————————┘
↓
i=7 [10 15 18 45 46 58 90] 62
┌—┘
↓
i=8 [10 15 18 45 46 58 62 90]
49 38 65 97 76 13 27 49* 55 04
|----------------------------|
38 27
|---------------------------|
65 49*
|----------------------------|
97 55
|--------------------------|
76 04
|-----------------------------|
一趟结果
13 27 49* 55 04 49 38 65 97 76
d=3
13 27 49* 55 04 49 38 65 97 76
|---------------|----------------|--------------------|
27 04 65
|----------------|----------------|
49* 49 97
|----------------|-----------------|
二趟结果
13 04 49* 38 27 49 66 65 97 76
d=1
13 04 49* 38 27 49 66 65 97 76
|-----|-----|-----|-----|-----|-----|-----|-----|-----|
三趟结果
04 13 27 38 49* 49 55 65 76 97
3..求n个数中m个数的全排列