C语言:用递归的方式对数组排序

Python012

C语言:用递归的方式对数组排序,第1张

#include <stdio.h>

#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循环的意思

这只是形象的比喻一下