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
    result.data[idx] = this.data[idx];
 
  int left, right;

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

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

  int tmp = result.data[left];  // swap [left] and [right]
  result.data[left] = result.data[right];
  result.data[right] = tmp;

  int i = left + 1;  // order the tail
  int j = n - 1;
  while (i < j)
  {
    tmp = result.data[i];
    result.data[i++] = result.data[j];
    result.data[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

Featured

  • Get Started Using .NET Aspire with SQL Server & Azure SQL Database

    Microsoft experts are making the rounds educating developers about the company's new, opinionated, cloud-ready stack for building observable, production ready, distributed, cloud-native applications with .NET.

  • Microsoft Revamps Fledgling AutoGen Framework for Agentic AI

    Only at v0.4, Microsoft's AutoGen framework for agentic AI -- the hottest new trend in AI development -- has already undergone a complete revamp, going to an asynchronous, event-driven architecture.

  • IDE Irony: Coding Errors Cause 'Critical' Vulnerability in Visual Studio

    In a larger-than-normal Patch Tuesday, Microsoft warned of a "critical" vulnerability in Visual Studio that should be fixed immediately if automatic patching isn't enabled, ironically caused by coding errors.

  • Building Blazor Applications

    A trio of Blazor experts will conduct a full-day workshop for devs to learn everything about the tech a a March developer conference in Las Vegas keynoted by Microsoft execs and featuring many Microsoft devs.

  • Gradient Boosting Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the gradient boosting regression technique, where the goal is to predict a single numeric value. Compared to existing library implementations of gradient boosting regression, a from-scratch implementation allows much easier customization and integration with other .NET systems.

Subscribe on YouTube