利用可变数组将用户输入数字排序后输出

来源:互联网 发布:python 求均值 方差 编辑:程序博客网 时间:2024/04/29 07:17

对于数字的排序有很多的算法,像冒泡排序法,插入排序法,选择排序法,希尔排序法,快速排序法

大多数情况下对于用户输入的内容进行排序我们可以直接是使用ArrayList.Sort()方法

代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections;
  6. namespace ConsoleApplication1
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             string str = "";
  13.             ArrayList  al =new ArrayList();
  14.             Console.WriteLine(" 请输入数字,输入exit退出");
  15.             str = Console.ReadLine();
  16.             while (str != "exit")
  17.             {
  18.                 int num = int.Parse(str);
  19.                 al.Add(num);
  20.                 str = Console.ReadLine();                
  21.             }
  22.             al.Sort();
  23.             for (int i = 0; i < al.Count; i++)
  24.             {
  25.                 Console.WriteLine("第{0}个数是:{1}", i + 1, al[i]);
  26.             }
  27.             Console.ReadLine();
  28.         }
  29.     }
  30. }

另贴出各种算法的代码

假设用户的输入数据已经存入List数组

  1.          /// <summary>
  2.          /// 冒泡排序法
  3.          /// </summary>
  4.          /// <param name="list"></param> 
  5.           public static void BubbleSort(int[] list)
  6.           {
  7.               for (int i = 0; i < list.Length; i++)
  8.               {
  9.                   for (int j = i; j < list.Length; j++)
  10.                   {
  11.                       if (list[i] < list[j])
  12.                       {
  13.                          int temp = list[i];
  14.                          list[i] = list[j];
  15.                          list[j] = temp;
  16.                      }
  17.                  }
  18.              }
  19.          }
  20.          /// <summary>
  21.          /// 插入排序法
  22.          /// </summary>
  23.          /// <param name="list"></param>
  24.          public static void InsertionSort(int[] list)
  25.          {
  26.              for (int i = 1; i < list.Length; i++)
  27.               {
  28.                  int t = list[i];
  29.                  int j = i;
  30.                  while ((j > 0) && (list[j - 1] > t))
  31.                  {
  32.                      list[j] = list[j - 1];
  33.                      --j;
  34.                  }
  35.                  list[j] = t;
  36.              }
  37.          }
  38.          //// <summary>
  39.          /// 选择排序法
  40.          /// </summary>
  41.          /// <param name="list"></param>
  42.          public static void SelectionSort(int[] list)
  43.          {
  44.              int min;
  45.              for (int i = 0; i < list.Length - 1; i++)
  46.              {
  47.                  min = i;
  48.                  for (int j = i + 1; j < list.Length; j++)
  49.                  {
  50.                      if (list[j] < list[min])
  51.                          min = j;
  52.                  }
  53.                  int t = list[min];
  54.                  list[min] = list[i];
  55.                  list[i] = t;
  56.              }
  57.          }
  58.         //// <summary>
  59.         /// 希尔排序法
  60.         /// </summary>
  61.         /// <param name="list"></param>
  62.         public static void ShellSort(int[] list)
  63.         {
  64.              int inc;
  65.              for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;
  66.              for (; inc > 0; inc /= 3)
  67.              {
  68.                  for (int i = inc + 1; i <= list.Length; i += inc)
  69.                  {
  70.                      int t = list[i - 1];
  71.                      int j = i;
  72.                      while ((j > inc) && (list[j - inc - 1] > t))
  73.                      {
  74.                          list[j - 1] = list[j - inc - 1];
  75.                          j -= inc;
  76.                      }
  77.                      list[j - 1] = t;
  78.                  }
  79.              }
  80.          }
  81.          private static void Swap(ref int l, ref int r)
  82.          {
  83.              int s;
  84.              s = l;
  85.              l = r;
  86.              r = s;
  87.          }
  88.          /// 快速排序法
  89.          /// </summary>
  90.          /// <param name="list"></param>
  91.          /// <param name="low"></param>
  92.          /// <param name="high"></param>
  93.          public static void Sort(int[] list, int low, int high)
  94.          {
  95.              int pivot;
  96.              int l, r;
  97.              int mid;
  98.              if (high <= low)
  99.                  return;
  100.              else if (high == low + 1)
  101.              {
  102.                  if (list[low] > list[high])
  103.                      Swap(ref list[low], ref list[high]);
  104.                  return;
  105.              }
  106.              mid = (low + high) >> 1;
  107.              pivot = list[mid];
  108.              Swap(ref list[low], ref list[mid]);
  109.              l = low + 1;
  110.              r = high;
  111.              do
  112.              {
  113.                  while (l <= r && list[l] < pivot)
  114.                      l++;
  115.                  while (list[r] >= pivot)
  116.                      r--;
  117.                  if (l < r)
  118.                      Swap(ref list[l], ref list[r]);
  119.              } while (l < r);
  120.              list[low] = list[r];
  121.              list[r] = pivot;
  122.              if (low + 1 < r)
  123.                  Sort(list, low, r - 1);
  124.              if (r + 1 < high)
  125.                  Sort(list, r + 1, high);
  126.          }

对于用户以字符串形式输入的数据进行排序,我参考了网上的一些帖子,进行如下处理

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections;
  6. namespace ConsoleApplication1
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             string str = "123,451,908,72,321,456";
  13.             int[] array = Array.ConvertAll<stringint>(str.Split(new char[] { ',' }), new Converter<stringint>(Convert.ToInt32));
  14.             Array.Sort(array);
  15.             foreach (int i in array)
  16.             {
  17.                 Console.WriteLine(i);
  18.             }
  19.             Console.ReadLine();
  20.         }
  21.     }
  22. }

对于不是','分隔的处理方法类似,不再累述。