Improved Permutations with the BigInteger Data Type: Listing 2

The Permutation Successor method.

public Permutation Successor()
  if ((left == 0) && data[left] > data[left+1)) 
       return null;
  Permutation result = new Permutation(this.n);

  for (int idx = 0; idx < result.n; ++idx)  // curr data to result[idx] =[idx];
  int left, right;

  left = n - 2;  // Find left value 
  while (([left] >[left + 1]) && (left >= 1))

  right = n - 1;  // find right; first value > left
  while ([left] >[right])

  int tmp =[left];  // swap [left] and [right][left] =[right];[right] = tmp;

  int i = left + 1;  // order the tail
  int j = n - 1;
  while (i < j)
    tmp =[i];[i++] =[j];[j--] = tmp;

  return result;

About the Author

Dr. James McCaffrey works for Microsoft Research in Redmond, Wash. He has worked on several Microsoft products including Azure and Bing. James can be reached at [email protected].

comments powered by Disqus


  • Entity Framework Core 6: What Developers Want

    Microsoft outlined its plan for Entity Framework Core 6, which in November will take its place as the data access component of the landmark .NET 6, a long-term support (LTS) release that will mark Microsoft's transition from the Windows-only .NET Framework to an open source, cross-platform umbrella offering of all things .NET.

  • AWS Open Sources .NET Porting Assistant GUI

    After previously open sourcing components of its Porting Assistant for .NET, Amazon Web Services open sourced the tool's GUI.

  • .NET Core Ranks High Among Frameworks in New Dev Survey

    .NET Core placed high in a web-dominated ranking of development frameworks published by CodinGame, which provides a tech hiring platform.

  • Here's a One-Stop Shop for .NET 5 Improvements

    Culled from reams of Microsoft documentation, here's a high-level summary of what's new for performance, networking, diagnostics and more, along with links to the nitty-gritty details for those wanting to dig in more.

Upcoming Events