所以基本上用户可以填写一个数字,该数字会被添加到列表中,一旦用户按下按钮,列表就应该排序而不使用.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。
答案 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++;
}