计算机基础

全排列

#include <stdio.h>
/**
 * 交换
 * @param arr    [description]
 * @param index1 [description]
 * @param index2 [description]
 */
void swap(int arr[], int index1, int index2){
		int temp = arr[index1];
		arr[index1] = arr[index2];
		arr[index2] = temp;
}
void showArr(int arr[], int len){
	for(int i = 0; i < len; i++){
		printf("%d ", arr[i]);
	}
	printf("\n");
}
/**
 * 全排列 
 *思路:第一个数和后面的数(包括自己)交换,每个交换结果又用第二个数和后面的数交换,交换结果又用第三个数和后面的数交换....最后一个数和最后一个数交换。
 * @param arr   [数组]
 * @param index [交换数位置]
 * @param num   [最后一个数的位置]
 */
void perm(int arr[], int index, int endIndex){
	if(index == endIndex){ //一次递归结束
		showArr(arr, endIndex+1);
	}else{
		for(int i = index; i <= endIndex; i++){
			swap(arr, index, i); //交换数(index)和后面的数(包括自己)交换
			perm(arr, index+1, endIndex); //递归 index+1
			swap(arr, i, index); //交换完了,要换回来 以便 下一次循环
		}
	}
}

int main(){
	int arr[4] = {1, 2, 3, 4};
	perm(arr, 0, 3);
	return 0;
}

关于作者

程序员,软件工程师,java, golang, rust, c, python,vue, Springboot, mybatis, mysql,elasticsearch, docker, maven, gcc, linux, ubuntu, centos, axum,llm, paddlepaddle, onlyoffice,minio,银河麒麟,中科方德,rpm