插入排序模拟事例:
待排序的数组时桌面上的一叠扑克牌。现在要对其进行排序:
在桌面上随便抽一张放在手上,很明显一张牌已拍好序。
在桌面上再随便抽一张上来,这一次需要和手上的牌进行比较,看是放在牌的前面还是后面。
在桌面上再随便抽一张牌上来。这次和桌面上也拍好序的牌比较,从后到前的比较。如果有大于新抽上来的牌的话,那么大于的牌位置就要发生改变了。
伪代码:
A [p,r]
for(j = p + 1;j < r;++j)
i = j - 1;
key = A[j];
while(i > 0 && A[i] > key)
A[i + 1] = A[i];
i = i - 1;
A[i + 1] = key;
选择排序:
待排序数组是桌面上的一叠扑克牌。现对其进行排序:
在桌面上找出最小的一张扑克牌,放在手上。
再在桌面上找第二小或相等的放在手上,如此继续,由于每次选的牌是由小到大,所以放在手上的牌位置不会在发生变化了。
A[p,r]
for(i = p;i < r;++i)
key = A[i];
index = i;
for(j = i + 1;j < r;++j)
if key > A[j]
index = j;
key = A[j];
tmp = A[i];
A[i] = key;
A[index] = tmp;