#define N 8
void selection_sort(int a[], int n) {
int i, t, imax = 0
if(n < 1) return
for(i = 1 i < n ++i) {
if(a[imax] < a[i])
imax = i
}
if(imax != n - 1) {
t = a[n - 1]
a[n - 1] = a[imax]
a[imax] = t
}
selection_sort(a, n - 1)
}
int main(void) {
int i, a[N] = {8,5,4,6,1,2,3,7}
printf("排序前:\n")
for(i = 0 i < N i++)
printf("%d ", a[i])
printf("\n")
selection_sort(a, N)
printf("排序后:\n")
for(i = 0 i < N i++)
printf("%d ", a[i])
printf("\n")
return 0
}
perm(list,i,j)是一个全排列函数,拿你上面的列子来说:perm(list,0,5)意思是数组list的前6个数(第0个数到第5个数)的所有排列,它细分的话就等于:第0个数和第1个数互换以后的perm(list,1,5) 第0数和第2数互换perm(list,1,5) ....第0数和第5数互换的perm(list,1,5) 和它本身的所在0位置的perm(list, 1, 5)
如假如6个数是1 2 3 4 5 6
他们的排列就 * * * * * * perm(list,0,5)
1 * * * * * perm(list,1,5)
2 * * * * * perm(list,1,5)
3 * * * * * perm(list,1,5)
4 * * * * * perm(list,1,5)
5 * * * * * perm(list,1,5)
6 * * * * * perm(list,1,5) 就是每一个数都在第0个位置上面都出现一次以后的排列总和。 也就是它的for循环的意思
这只是形象的比喻一下