📌  相关文章
📜  用于重新排列给定列表的 C++ 程序,使其由交替的最小最大元素组成

📅  最后修改于: 2022-05-13 01:57:44.953000             🧑  作者: Mango

用于重新排列给定列表的 C++ 程序,使其由交替的最小最大元素组成

给定一个整数列表,重新排列列表,使其仅使用列表操作由交替的最小-最大元素组成。列表的第一个元素应该是最小值,第二个元素应该是列表中所有元素的最大值。类似地,第三个元素将是下一个最小元素,第四个元素是下一个最大元素,依此类推。不允许使用额外的空间。

例子:

Input:  [1 3 8 2 7 5 6 4]
Output: [1 8 2 7 3 6 4 5]

Input:  [1 2 3 4 5 6 7]
Output: [1 7 2 6 3 5 4]

Input:  [1 6 2 5 3 4]
Output: [1 6 2 5 3 4]

这个想法是首先按升序对列表进行排序。然后我们开始从列表末尾弹出元素并将它们插入到列表中的正确位置。
下面是上述想法的实现——

C/C++
// C++ program to rearrange a given list 
// such that it consists of alternating 
// minimum maximum elements
#include 
using namespace std;
  
// Function to rearrange a given list 
// such that it consists of alternating 
// minimum maximum elements
void alternateSort(list& inp)
{
    // sort the list in ascending order
    inp.sort();
  
    // get iterator to first element of 
    // the list
    list::iterator it = inp.begin();
    it++;
  
    for (int i = 1; 
             i < (inp.size() + 1) / 2; i++)
    {
        // pop last element (next greatest)
        int val = inp.back();
        inp.pop_back();
  
        // insert it after next minimum 
        // element
        inp.insert(it, val);
  
        // increment the pointer for next 
        // pair
        ++it;
    }
}
  
// Driver code
int main()
{
    // Input list
    list inp({ 1, 3, 8, 2, 7, 5, 6, 4 });
  
    // Rearrange the given list
    alternateSort(inp);
  
    // Print the modified list
    for (int i : inp)
        cout << i << " ";
  
    return 0;
}



输出:
1 8 2 7 3 6 4 5

请参阅有关重新排列给定列表的完整文章,使其包含交替的最小最大元素以获取更多详细信息!