java inbuilt permutation function code example

Example 1: java next permutation

public static boolean next_permutation(int[] arr) {
	int len = arr.length;
	int i = len - 1;

    // 1. find largest i where arr[i - 1] < arr[i]
	while (i > 0) {
		if (arr[i - 1] < arr[i]) break;
    	i--;
  	}

  	if (i <= 0) return false;

  	// 2. find largest j where arr[i - 1] < arr[j] and j >= i
  	int j = len - 1;
  	while (j >= i) {
    	if (arr[i - 1] < arr[j]) break;
    	j--;
  	}

	// 3. swap elements between arr[i-1] and arr[j]
  	swap(i - 1, j, arr);

  	// 4. reverse elements from i to end of array
  	len--;
  	while (i < len) {
    	swap(i, len, arr);
    	len--;
    	i++;
  	}
  	return true;
}

public static void swap(int x, int y, int[] arr) {
  	int temp = arr[x];
  	arr[x] = arr[y];
  	arr[y] = temp;
}

Example 2: generate all permutations of string

void perm(char a[], int level){

    static int flag[10] = {0};
    static char res[10];
    // If we are the last character of the input string 
    if(a[level] == '\0'){
        // First we assign stopping point to result
        res[level] = '\0';
        // Now we print everything
        for(int i = 0; res[i] != '\0'; ++i){
            printf("%c", res[i]);
        }
        printf("\n");
        ++counter;
    }
    else{
        // Scan the original string and flag to see what letters are available
        for(int i = 0; a[i] != '\0'; ++i){
            if(flag[i] == 0){
                res[level] = a[i];
                flag[i] = 1;
                perm(a, level + 1);
                flag[i] = 0;
            }
        }
    }
}

int main(){
    char first[] = "abc";
    perm(first, 0);
    return 0;
}

Tags:

Misc Example