程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#完成求一組數據眾數的辦法

C#完成求一組數據眾數的辦法

編輯:C#入門知識

C#完成求一組數據眾數的辦法。本站提示廣大學習愛好者:(C#完成求一組數據眾數的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成求一組數據眾數的辦法正文


本文實例講述了C#完成求一組數據眾數的辦法。分享給年夜家供年夜家參考。詳細以下:

1.算法描寫

1)輸出正當性磨練(輸出不克不及為空)
2)制造數組正本,前面的操作將不修正數組自己,只對正本停止操作
3)數組排序(把相等的數都湊到一“堆兒”)
4)統計分歧的元素數(統計“堆兒”數,以肯定步調5中要應用的數組年夜小)
5)統計各個元素數目(統計每“堆兒”的年夜小,並存入數組)
6)按元素在原數組內數目降序分列,數目相等的元素則按年夜小升序分列
7)統計眾數數目(肯定前往數組的年夜小),假如眾數數目過剩給出阈值的數目,則以為這個數組內沒有眾數
8)生成前往眾數數組

注:本算法只是供給了一種思緒,其實不代表此類成績的最優解

2.應用到的構造和函數

/// <summary>
/// 構造:用於統計每一個數湧現的次數
/// </summary>
struct Stats
{
  //數字,湧現的次數
  public double Number;
  public int Count;
  //結構函數
  public Stats(double n, int c) 
  { 
    Number = n;
    Count = c;
  }
}
/// <summary>
/// 盤算數組的眾數
/// </summary>
/// <param name="array">數組</param>
/// <param name="threshold">數目阈值,眾數數目若多於次數則以為沒有眾數</param>
/// <returns></returns>
private static double[] ModeOf(double[] array, int threshold = 5)
{
  //數組排序-統計各元素數目-按各元素數目排序-再統計最多的元素
  //1.輸出正當性磨練
  if (array == null || array.Length == 0 || threshold < 1)
  {
    return new double[] { };
  }
  //2.制造數組正本,前面的操作將不修正數組自己
  double[] tempArray = new double[array.Length];
  array.CopyTo(tempArray,0);
  //3.數組排序
  double temp;
  for (int i = 0; i < tempArray.Length; i++)
  {
    for (int j = i; j < tempArray.Length; j++)
    {
      if (tempArray[i] < tempArray[j])
      {
        temp = tempArray[i];
        tempArray[i] = tempArray[j];
        tempArray[j] = temp;
      }
    }
  }
  //4.統計分歧的元素數
  int counter = 1;
  for (int i = 1; i < tempArray.Length; i++)
  {
    if (tempArray[i] != tempArray[i - 1])
    {
      counter++;
    }
  }
  //5.統計各個元素數目
  int flag = 0;
  Stats[] statsArray = new Stats[counter];
  statsArray[flag].Number = tempArray[0];
  statsArray[flag].Count = 1;
  for (int i = 1; i < tempArray.Length; i++)
  {
    if (tempArray[i] == statsArray[flag].Number)
    {
      statsArray[flag].Count++;
    }
    else
    {
      flag++;
      statsArray[flag].Number = tempArray[i];
      statsArray[flag].Count = 1;
    }
  }
  //6.按元素在原數組內數目(Count屬性)降序分列
  // 數目相等的元素則按年夜小升序分列
  for (int i = 0; i < statsArray.Length; i++)
  {
    for (int j = i; j < statsArray.Length; j++)
    {
      if (statsArray[i].Count < statsArray[j].Count ||
        (statsArray[i].Count == statsArray[j].Count &&
          statsArray[i].Number > statsArray[j].Number))
      {
        temp = statsArray[i].Number;
        statsArray[i].Number = statsArray[j].Number;
        statsArray[j].Number = temp;
        temp = statsArray[i].Count;
        statsArray[i].Count = statsArray[j].Count;
        statsArray[j].Count = (int)temp;
      }
    }
  }
  //7.統計眾數數目
  int count = 1;
  if (statsArray.Length > threshold &&
    statsArray[threshold].Count == statsArray[0].Count)
  {
    //眾數過剩阈值數目,則以為沒有眾數
    return new double[] { };
  }
  else
  {
    for (int i = 1; i < statsArray.Length && i < threshold; i++)
    {
      if (statsArray[i].Count == statsArray[i - 1].Count)
      {
        count++;
      }
      else break;
    }
  }
  //8.生成前往眾數數組
  double[] result = new double[count];
  for (int i = 0; i < count; i++)
  {
    result[i] = statsArray[i].Number;
  }
  return result;
}

3.Main函數挪用

static void Main(string[] args)
{
  //示例數組1
  double[] arr1 = new double[] 
  {
    3, 2, 7, 4, 8, 8, 5,
    5, 6, 5, 4, 3, 4, 9,
    1, 1, 1, 2, 2, 0, 6
  };
  double[] d1 = ModeOf(arr1);
  if (d1.Length != 0)
  {
    Console.Write("數組 1 有 " + d1.Length + " 個眾數:");
    for (int i = 0; i < d1.Length; i++)
    {
      Console.Write(d1[i] + " ");
    }
    Console.WriteLine();
  }
  else
  {
    Console.WriteLine("數組 1 沒有眾數");
  }
  //示例數組2
  double[] arr2 = new double[] 
  {
    1, 2, 3, 4, 5, 6
  };
  double[] d2 = ModeOf(arr2);
  if (d2.Length != 0)
  {
    Console.Write("數組 2 有 " + d2.Length + " 個眾數:");
    for (int i = 0; i < d2.Length; i++)
    {
      Console.Write(d2[i] + " ");
    }
    Console.WriteLine();
  }
  else
  {
    Console.WriteLine("數組 2 沒有眾數");
  }
  Console.ReadLine();
}

4.運轉示例

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved