有没有一种方法可以交换数组的两个部分而不需要创建一个新部分?就像剪一副纸牌一样?我可以通过分配一个新数组然后先插入顶部扇区然后插入下部扇区元素来做到这一点。
我已经尝试在没有额外数组的情况下做到这一点,并且有两个临时变量来保存元素,而算法会在部分之间进行交换。问题是我的尝试适用于特定情况。
例如:
原始数组:0 1 2| 3 4 5 6 7
在索引二处切割
交换数组:
3 4 5 6 7| 0 1 2
有没有一种方法可以交换数组的两个部分而不需要创建一个新部分?就像剪一副纸牌一样?我可以通过分配一个新数组然后先插入顶部扇区然后插入下部扇区元素来做到这一点。
我已经尝试在没有额外数组的情况下做到这一点,并且有两个临时变量来保存元素,而算法会在部分之间进行交换。问题是我的尝试适用于特定情况。
例如:
原始数组:0 1 2| 3 4 5 6 7
在索引二处切割
交换数组:
3 4 5 6 7| 0 1 2
您可以std::rotate
用于此任务。它对集合中的数据进行左旋转,因此您指定一个“切割”点,它会移动元素,以便紧接在指定切割点之后的元素位于开头,而那些在切割点之前的元素将被移到最后。
是的,您可以 - 存储后半部分的第一个元素,将前半部分向右移动。将第 0 个数组元素分配给这个存储的数字。您刚刚将下半场的第一个号码移到了开头。重复下一个等。
代码草稿:
for(int i = start; i < arr.size(); i++){
double temp = arr[i];
for(int j = start-1; j > i - start; j--){
arr[j+1] = arr[j];
}
arr[i - start] = temp;
}