天天看点

【C++】求数组中所有元素的排列或组合

基本目标是这样的,比如有如下的数组{0,1,2,3,7,8,12,40,51}需要求出其所有排列与组合,

【C++】求数组中所有元素的排列或组合

需要求出其所有组合,做出如上的结果,也就是随便在数组中挑两个数组成一个对子。

代码如下,这里需要用到一个两组循环:

void Combination(int* arr,int arr_length){
	for(int i=0;i<arr_length-1;i++){
		for(int j=i+1;j<arr_length;j++){
			cout<<"{"<<arr[i]<<","<<arr[j]<<"}";
		}
	}
}
           

思想是指针j从i,这个从数组开始到数组末尾不停缓慢移动的指针,移到数组末尾,输出数组中脚标为i与j的两个元素,之后i++,j回到i这个位置。

好像很复杂的样子,但是联系到C语言中著名的冒泡排序,就很简单的。

其实冒泡排序也是用到这种类似的双重循环的思想,只是每次循环,j的指针不是回到i这个位置,而是回到数组开头。

以下是冒泡排序的代码:

void bubbleSort(int* arr,int arr_length){
	for(int i=0;i<arr_length-2;i++){
		for(int j=0;j<arr_length-1;j++){
			if(arr[j]>arr[j+1]){
				int temp=arr[j+1];
				arr[j+1]=arr[j];
				arr[j]=temp;
			}
		}
	}
}
           

以下是冒泡排序的运行结果:

【C++】求数组中所有元素的排列或组合

继续阅读