手动排序列表

时间:2016-04-04 12:14:14

标签: c# arrays list sorting

所以基本上用户可以填写一个数字,该数字会被添加到列表中,一旦用户按下按钮,列表就应该排序而不使用.Sort();函数

    public int[] nummers;
    public ObservableCollection<int> alleNummers = new ObservableCollection<int>();
    public MainWindow()
    {
        InitializeComponent();
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {
        alleNummers.Add(int.Parse(nummerBox.Text));
        listBox.ItemsSource = alleNummers;
    }

    private void sortBtn_Click(object sender, RoutedEventArgs e)
    {
        foreach (int i in alleNummers)
        {
            //Sort the int's from small to big
        }
        nummers = alleNummers.ToArray();
        listBox.ItemsSource = nummers;
    }

我认为,我需要使用foreach循环,但不知道要输入什么。 这是一个很小的家庭作业btw。

4 个答案:

答案 0 :(得分:3)

以下是一些可以通过编程方式对列表进行排序的算法Sorting Algorithms with Code and great explanation

冒泡排序

 public static void IntArrayBubbleSort (int[] data)
  {
     int i, j;
     int N = data.Length;

     for (j=N-1; j>0; j--) {
        for (i=0; i<j; i++) {
           if (data [i] > data [i + 1])
              exchange (data, i, i + 1);
        }
     }
  }

选择排序

 public static int IntArrayMin (int[] data, int start)
      {
         int minPos = start; 
         for (int pos=start+1; pos < data.Length; pos++)
            if (data [pos] < data [minPos])
               minPos = pos;
         return minPos; 
      }

      public static void IntArraySelectionSort (int[] data)
      {
         int i;
         int N = data.Length;

         for (i=0; i < N-1; i++) {
            int k = IntArrayMin (data, i);
            if (i != k)
               exchange (data, i, k);
         }
      }

插入排序

 public static void IntArrayInsertionSort (int[] data)
      {
         int i, j;
         int N = data.Length;

         for (j=1; j<N; j++) {
            for (i=j; i>0 && data[i] < data[i-1]; i--) {
               exchange (data, i, i - 1);
            }
         }
      }

外壳排序

   static int[] GenerateIntervals (int n)
  {
     if (n < 2) {  // no sorting will be needed
        return new int[0];
     }
     int t = Math.Max (1, (int)Math.Log (n, 3) - 1);
     int[] intervals = new int[t];       
     intervals [0] = 1;
     for (int i=1; i < t; i++)
        intervals [i] = 3 * intervals [i - 1] + 1;
     return intervals;
  }

  public static void IntArrayShellSortBetter (int[] data)
  {
     int[] intervals = GenerateIntervals (data.Length);
     IntArrayShellSort (data, intervals);
  }

Quicksort a.k.a. Partition Sort

  public static void IntArrayQuickSort (int[] data, int l, int r)
      {
         int i, j;
         int x;

         i = l;
         j = r;

         x = data [(l + r) / 2]; /* find pivot item */
         while (true) {
            while (data[i] < x)
               i++;
            while (x < data[j])
               j--;
            if (i <= j) {
               exchange (data, i, j);
               i++;
               j--;
            }
            if (i > j)
               break;
         }
         if (l < j)
            IntArrayQuickSort (data, l, j);
         if (i < r)
            IntArrayQuickSort (data, i, r);
      }

      public static void IntArrayQuickSort (int[] data)
      {
         IntArrayQuickSort (data, 0, data.Length - 1);
      }

随机数据生成

 public static void IntArrayGenerate (int[] data, int randomSeed)
      {
         Random r = new Random (randomSeed);
         for (int i=0; i < data.Length; i++)
            data [i] = r.Next ();
      }

答案 1 :(得分:1)

我想提供本指南作为您问题的解决方案

  

排序算法代表每个人的基础知识   计算机科学家和IT专业人员至少应该知道基础知识   水平。事实证明这是学习数组原因的好方法   比数学更重要。

     

在本节中,我们将看一些众所周知的   排序算法,希望能让你对这个概念敏感   绩效 - 这类课程将详细介绍   作为算法和数据结构

C#中的计算机科学概论10.4. Sorting Algorithms

它包含许多示例,包括冒泡排序:

public static void IntArrayBubbleSort (int[] data)
  {
     int i, j;
     int N = data.Length;

     for (j=N-1; j>0; j--) {
        for (i=0; i<j; i++) {
           if (data [i] > data [i + 1])
              exchange (data, i, i + 1);
        }
     }
  }

答案 2 :(得分:0)

这是BubbleSort算法的实现。这是最慢的,但也是容易理解的#34;排序算法。

for (int i = (alleNummers.Count - 1); i >= 0; i--)
{
    for (int j = 1; j <= i; j++)
    {
        if (alleNummers[j - 1] > alleNummers[j])
        {
            var temp = alleNummers[j - 1];
            alleNummers[j - 1] = alleNummers[j];
            alleNummers[j] = temp;
        }
    }
}

如果你想使用另一个,我在最近的一个答案中提到了一些: I want an efficient sorting algorithm to sort an array

答案 3 :(得分:0)

试试这个!这种方法会按升序排列列表。

        List<int> lst = new List<int>() { 2, 3, 1, 0, 5 };

        int j=0;

        while (j < lst.Count)
        {
            for (int i = lst.Count - 1; i >= 0; i--)
            {
                if ((i - 1) >= 0 && lst[i] < lst[i - 1])
                {
                    int temp = lst[i];
                    lst[i] = lst[i - 1];
                    lst[i - 1] = temp;
                }

            }
            j++;
        }