基本目标是这样的,比如有如下的数组{0,1,2,3,7,8,12,40,51}需要求出其所有排列与组合,
需要求出其所有组合,做出如上的结果,也就是随便在数组中挑两个数组成一个对子。
代码如下,这里需要用到一个两组循环:
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;
}
}
}
}
以下是冒泡排序的运行结果: