将数组元素全排列后输出每个排列结果

来源:互联网 发布:centos 火狐flash插件 编辑:程序博客网 时间:2024/05/16 11:28
#include <iostream>#include <malloc.h>///////////////////////////char *ary; //数组指针////////////////////////////////////////////////void init_ary(int n); //数组个数void srt_l_h(int n); //将数组按值从小到大排列void srt_a_b(char *a, char *b); //交换a,bint find_srt(int n); //找到待排序的位置并进行排序void print(int n); //打印结果/////////////////////////////////////////////////int main() {int n;std::cout << "input tbe dimention of array " ;std::cin >> n;init_ary(n);int sum=0; //计算排序个数srt_l_h(n);print(n);sum++;while(find_srt(n)==1) {print(n);sum++;}std::cout << "sum= " << sum << '\n';return 0;}///////////////////////////////////////////////////void init_ary(int n) {std::cout << "input the data for arry" << '\n';ary = (char *)malloc(n*sizeof(char));for(int i=0; i<n; i++)std::cin >> *(ary+i);}///////////////////////////////////////////////////////void srt_l_h(int n) {std::cout << "resort the arry from low to high" << '\n';for(int i=0; i<n-1; i++) {char min = *(ary+i);int flag = i;for(int j=i+1; j<n; j++)if(*(ary+j)<min) {min = *(ary+j);flag = j;}if(flag != i) {char tmp = *(ary+i);*(ary+i) = *(ary+flag);*(ary+flag) = tmp;}}}/////////////////////////////////////////////////////////////void print(int n) {for(int i=0; i<n; i++)std::cout << *(ary+i);std::cout << '\n';}//////////////////////////////////////////void srt_a_b(char *a, char *b) {char tmp;tmp = *a; *a = *b;*b = tmp;}/////////////////////////////////////////////int find_srt(int n) {int i,j;int flag=0; int waitNum;int tempNum;int minNum;char t;for(i=n-2;i>=0;i--){if(*(ary+i)<*(ary+i+1)){waitNum=i;tempNum=waitNum+1;flag=1;break;}}if(flag==1){ //找到当前值之后大于当前值的最小值并标记其位置for(i=waitNum+1;i<n;i++){if(*(ary+i)>*(ary+waitNum) && *(ary+i)<*(ary+tempNum))tempNum=i;}minNum=tempNum; //minNum标记最小的位置srt_a_b(ary+waitNum,ary+minNum); //将当前值和最小值交换for(i=waitNum+1;i<n-1;i++) //将新当前值之后的按从小到大排列for(j=i+1;j<n;j++)if(*(ary+i)>*(ary+j)){t=*(ary+i);*(ary+i)=*(ary+j);*(ary+j)=t;}return 1;}return 0;}

 


原创粉丝点击