字典序法实现全排列
#include<iostream>
using namespace std;
#define M 9
int tempData[9 * 8 * 7 * 6 * 5 * 4 * 3 * 2][M] = {0};
void sort(int array[],int begin,int end);
void view(int array[],int length);
bool jud(int array[]);
void getData(int array[]);
int getPoint(int array[],int value);
int main(int argc,char** argv){
int data[M] = {1,2,3,4,5,6,7,8,9};
getData(data);
return 0;
}
void getData(int array[]){
int i = 0,j = 0;
int temp;
int nums = 0;
for(int i = 0;i < M;i++){
tempData[nums][i] = array[i];
}
nums++;
while(jud(array)){
for(int m = M - 1;m > 0;m--){
if(array[m] > array[m - 1]){
i = m - 1;
j = getPoint(array,array[i]);
temp = array[i];
array[i] = array[j];
array[j] = temp;
break;
}
}
sort(array,i + 1,M - 1);
for(int i = 0;i < M;i++){
tempData[nums][i] = array[i];
}
nums++;
}
}
void sort(int array[],int begin,int end){
int temp = 0;
for(int i = begin;i < end;i++){
for(int j = i + 1;j <= end;j++){
if(array[i] > array[j]){
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
void view(int array[],int length){
for(int i = 0;i < length;i++){
cout << array[i] << " ";
}
cout << endl;
}
bool jud(int array[]){
for(int i = 0;i < M - 1;i++){
if(array[i] < array[i + 1]){
return true;
}
}
return false;
}
int getPoint(int array[],int value){
for(int i = M - 1;i >= 0;i--){
if(array[i] > value){
return i;
}
}
}