计算在 C++ 中对数组进行排序的“前移”移动的最小次数
我们得到了一个介于1到n之间的数字数组。这里的目标是找到不。对给定数组进行排序所需的“移到前面”操作。数组没有重复。'movetofront'操作选取一个元素并放置在第一个位置,这里是索引0。
我们将从末尾遍历数组,如果元素位于正确的位置,则不需要移动其他移动。对于从1到n的元素,元素arr[i]数组中的正确位置应位于索引i+1。arr[0]应该是1,arr[1]应该是2并且…….arr[n-1]应该是n。
输入
Arr[]= { 4,3,2,1 }输出结果
Minimum move-to-front operations: 3
解释
Pull 3, 3,4,2,1 count=1 Pull 2, 2,3,4,1 count=2 Pull 1, 1,2,3,4 count=3
输入
Arr[]= { 6,1,2,5,4,3 }输出结果
Minimum move-to-front operations: 5
解释
Pull 5, 5,6,1,2,4,3 count=1 Pull 4, 4,5,6,1,2,3 count=2 Pull 3, ,4,5,6,1,2 count=3 Pull 2, 2,3,4,5,6,1 count=4 Pull 1, 1,2,3,4,5,6 count=5
下面程序中使用的方法如下
整数数组Arr[]存储数字1到n。
整数变量大小存储数组Arr[]的长度
函数movetoFront(intarr[],intn)接受一个数组及其长度作为输入,并返回对给定数组进行排序所需的最小“移动到前端”操作数。
计数变量用数组的大小初始化,因为在降序数组的情况下可以移动所有元素。
从最后一个索引开始遍历并向前移动,如果元素值与count相同,(对于1到n之间的排序元素,n是最后一个,n-1是倒数第二个,依此类推)然后将count作为该元素递减是在正确的位置。
这样在循环结束时,count就有了想要的结果。
示例
#include输出结果using namespace std; //计算排列阵列的最小移动次数 //以递增的顺序。 int movetoFront(int arr[], int n){ //计算所有元素都正确放置 int count = n; //从末尾遍历数组 for (int i=n-1; i >= 0; i--){ //如果当前项目在其正确位置, //减少计数 //范围是1到n所以每个arr[i]应该有值i+1 //1在0索引,2在1索引........ if (arr[i] == count) count--; } return count; } int main(){ int Arr[] = {5, 3, 4, 7, 2, 6, 1}; int size = 7; cout <<"Minimum 'move-to-front' to sort array:"<< movetoFront(Arr, size); return 0; }
Minimum 'move-to-front' to sort array:6