字典序法实现全排列

#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;
  }
 }
 
}

posted @ 2018-05-23 15:48  IT蓝月  阅读(104)  评论(0编辑  收藏  举报
Live2D