1 #include<stdio.h> 2 int n; 3 int a[200]; 4 void dfs(int begin){ 5 if(begin+1>n){//出口 6 return; 7 }else{ 8 int min=begin;//定义一个最小值存放最小值的小标 9 for(int i=begin+1;i<n;i++){//前面排好了,在后面没排的中找 10 if(a[min]>a[i])//决定升序降序 11 min = i;//将更小值的小标赋给min 12 } 13 printf("swap(a[%d], a[%d]):",begin,min);//按题意:min<begin 14 int t = a[min];//交换值呗 15 a[min] = a[begin]; 16 a[begin] = t; 17 for(int i=0;i<n;i++){//输出呗 18 printf("%d ",a[i]); 19 } 20 printf("\n"); 21 dfs(begin+1);//找下一个呗 22 } 23 } 24 int main(){ 25 scanf("%d",&n); 26 getchar();//处理回车 27 for(int i=0; i<n; i++){ 28 scanf("%d",&a[i]); 29 } 30 dfs(0);//从第0个位置开始 31 return 0; 32 }
原文:http://www.cnblogs.com/panweiwei/p/6663535.html