有关递归问题,各位高手帮忙看下谢了
用递归算法对int型数组进行双向选择排序。“双向选择排序”法是每次在一个未排序的子表中选出一个最小的和最大的元素分别与子表的第一和最后一个元素交换,子表不断缩小直至子表中不足两个元素。 完全没思路啊!什么是递归还不大懂帮帮忙谢了!!
#include <stdio.h> #include <stdlib.h> #define SWAP(a, b) {int t__=(a); (a)=(b); (b)=t__; } void sort(int *a, int len) { printf("sort(%d, %d)\n", 0, len); if (len > 1) { int min = 0, max = len - 1, i; for (i = 1; i < len; i++) if (a[i] < a[min]) min = i, printf("a:%d ", i); else if (a[i] > a[max]) max = i, printf("b:%d ", i); SWAP(a[0], a[min]); SWAP(a[len - 1], a[max]); return sort(a + 1, len - 2); } } int main(void) { int i, a[] = {3, 1, 4, 2}; sort(a, 4); for (i = 0; i < 4; i++) printf("%d ", a[i]); printf("\n"); return 0; }