我正在学习排序算法,目前我的第一个"分销通行证#34;正如我的描述所描述的那样,第一个循环是我根据值的值将每个值排序到我的桶阵列中的位置。除了我的values数组的第9个索引之外,它适用于每个值。循环在到达第9个索引之前终止。我试过改变for循环的条件,但这似乎不起作用。关于正在发生的事情的一些帮助或提示将非常感激!
**编辑这不是完整的算法,它只是前两个步骤。我按照c#book的说明进行操作。在每个循环之前放置的注释是本书中的单词指令。我不想继续使用排序算法,直到第一个循环正常工作。
public static void Sort(int[] values)
{
int n = values.Length;
int[,] buckets = new int[n, n - 1];
int index = 0;
// Place each value of the one-dimensional array
// into a row of the bucket array, based on the
// value's "one's" (rightmost) digit.
// "Distribution Pass"
for (int i = 0; i < values.Length -1; ++i)
{
// Get the one's value of values[i]
int ones = (values[i] % 10);
// Place the value in the appropriate bucket
buckets[ones, i] = values[i];
}
// Loop through the bucket array row by row,
// and copy the values back to the original
// array.
// "Gathering Pass"
for (int r = 0; r < n; r++)
{
for (int c = 0; c < n - 1; c++)
{
try
{
if (buckets[r, c] != 0)
{
values[index] = buckets[r, c];
index++;
}
}
catch
{
}
}
}
}
private void button1_Click(object sender, EventArgs e)
{
Random rand = new Random();
int[] randomArray = new int[10];
label1.Text = "Unsorted Array: ";
label2.Text = " Sorted Array: ";
for (int i = 0; i < randomArray.Length; i++)
{
randomArray[i] = rand.Next(10, 100);
label1.Text += randomArray[i] + " ";
}
Sort(randomArray);
label2.Text += string.Join(" ", randomArray);
}