Chapter 5: 递归法
5.2 两个简单例子
5.2.1 选择排序
选择排序:把所有队员扫描一边,从中挑出最矮的一个队员。把这个最矮的队员和站在队列最左端的队员交换位置,即站到0号位置。现在最左端的队员是有序的了。(注意这个算法有序的队员都排在队列的左边,而冒泡都在右边)。再次扫描球队队列,这次从一号位置开始,还是寻找最矮的,然后和1号位置的队员交换。一直持续到所有队员都排好序。
/** * 选择排序,非迭代方式 * @param a: 待排序的数组引用 */ public void selectionSort(int [] a){ int minIndex; for (int i = 0; i < a.length; i++) { minIndex = i; for (int j = i+1; j < a.length; j++) { if (a[minIndex] > a[j]) { minIndex = j; } } ArrayTools.interChange(a, minIndex, i); } }
/** * 选择排序,迭代方式 */ public void selectionSortRec(int [] a, int i){ int minIndex; if (i < a.length) { minIndex = i; for (int j = i+1; j < a.length; j++) { if (a[minIndex] > a[j]) { minIndex = j; } } ArrayTools.interChange(a, minIndex, i); i++; selectionSortRec(a,i); } } |
5.2.5 插入排序
队伍中有一个标记队员,在他的左边的所有队员已经是局部有序的了(从小个到高个排序)。现在把标记队员同局部有序队列里的队员比较身高,如果小于某个队员(A[i]),把标记队员存入一个临时变量,然后把A[i]和他之后的局部有序队列里的队员右移一位。重复以上过程。