我正在做一個類的分配,
我需要創建一個隨機數的二維數組,並將它們排序爲氣泡或其他排序代碼。我對單個數組很好,但問題是填充了隨機數的二維數組,我只是不明白。 隨機數字應該是(-I,I)間隔它是用戶輸入。對不起英文不好,還沒有獲得任何學位。在Visual C#窗體上工作。 尋找簡單的夫妻方法。例如 。 :A[MxN] ->>> B[MxN] (Sorted 1.....n)
如何對用隨機數填充的二維數組進行排序
0
A
回答
0
獲取的隨機數是微不足道:
Random rnd;
for (int y = 0; y < h; y++)
for (int x = 0; x < w; x++)
array[y][x] = l - rnd.Next(2 * l + 1);
Random.Next()
將返回0之間和所述給定參數的隨機值(不包括參數;這對於+ 1
的原因)。
二維數組可以像一維數組一樣排序,它只取決於您想要如何處理多行,它只是用於顯示或做你想做的每一行自行解決,等
0
這裏有一個解決方案,首先會在每個行的列插入順序,然後排序每行由第一列比較,然後第二等:
namespace StackOverflow.Demos
{
class Program
{
public static void Main(string[] args)
{
new Program();
Console.WriteLine("Done");
Console.ReadKey();
}
Program()
{
double[,] data = GenerateData();
OutputData(data, "Before");
SortData(ref data);
OutputData(data, "After");
}
double[,] GenerateData()
{
Random randomGenerator = new Random(DateTime.UtcNow.Millisecond);
double[,] data = new double[5, 5];
for (int i = 0; i < data.GetLength(0); i++)
{
for (int j = 0; j < data.GetLength(1); j++)
{
data[i, j] = (randomGenerator.NextDouble() * 2) - 1;
}
}
return data;
}
void OutputData(double[,] data, string message)
{
Console.WriteLine("=====================");
Console.WriteLine(message);
Console.WriteLine("=====================");
for (int i = 0; i < data.GetLength(0); i++)
{
for (int j = 0; j < data.GetLength(1); j++)
{
Console.Write(data[i, j]);
Console.Write("\t");
}
Console.WriteLine();
}
}
void SortData(ref double[,] data)
{
//sort sub arrays
SortDataRows(ref data);
//sort this array
for (int i = 0; i < data.GetLength(0)-1; i++)
{
for (int j = i; j < data.GetLength(0); j++)
{
for (int k = 0; k < data.GetLength(1); k++)
{
if (data[i, k].CompareTo(data[j, k]) < 0) //if already in order exit loop
{
break;
} else if (data[i, k].CompareTo(data[j, k]) > 0) //if out of order switch and loop
{
SwapRows(ref data, i, j);
break;
}//else orders are equal so far; continue to loop
}
}
}
}
void SortDataRows(ref double[,] data)
{
for (int row = 0; row < data.GetLength(0); row++)
{
for (int i = 0; i < data.GetLength(1) - 1; i++)
{
for (int j = i; j < data.GetLength(1); j++)
{
if (data[row, i].CompareTo(data[row, j]) > 0)
{
Swap<double>(ref data[row, i], ref data[row, j]);
}
}
}
}
}
void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
void SwapRows(ref double[,]data, int i, int j)
{
for (int k = 0; k < data.GetLength(1); k++)
{
Swap<double>(ref data[i, k], ref data[j, k]);
}
}
}
}
該代碼不是最好的(還沒有喝杯茶),但應該做你以後的事情。
這裏的一個更好的解決方案(不使用2D陣列本身,而是使用可以很容易地從這樣的陣列轉換成/結構):
唱System.Diagnostics程序;
namespace StackOverflow.Demos
{
class Program
{
public static void Main(string[] args)
{
new Program();
Console.WriteLine("Done");
Console.ReadKey();
}
Program()
{
List<List<double>> data = GenerateData(5, 5).ToList<List<double>>();
OutputData(data,"Before");
foreach (List<double> item in data)
{
item.Sort();
}
data.Sort(CompareListOfDoubles);
OutputData(data,"After");
}
private IEnumerable<List<double>> GenerateData(int index1, int index2)
{
Random rnd = new Random(DateTime.UtcNow.Millisecond);
List<double> result;
for (int i = 0; i < index1; i++)
{
result = new List<double>(index2);
for (int j = 0; j < index2; j++)
{
result.Add(rnd.NextDouble() * 2 - 1);
}
yield return result;
}
}
private void OutputData(List<List<double>> data, string message)
{
Console.WriteLine(message);
foreach (List<double> list in data)
{
foreach (double datum in list)
{
Console.Write(datum);
Console.Write("\t");
}
Console.WriteLine();
}
}
static int CompareListOfDoubles(List<double> a, List<double> b)
{
for (int i = 0; i < a.Count; i++)
{
if (i > b.Count) return -1;
if (a[i] > b[i]) return -1;
if (a[i] < b[i]) return 1;
}
if (b.Count > a.Count) return 1;
return 0;
}
double[,] ConvertListListDoubleTo2DArray(List<List<double>> data)
{
double[,] result = new double[data.Count, data[0].Count];
for (int i = 0; i < result.GetLength(0); i++)
{
for (int j = 0; j < result.GetLength(1); j++)
{
result[i, j] = data[i][j];
}
}
return result;
}
}
相關問題
- 1. 如何從二維數組中填充一維數組,以及如何對一維數組進行排序?
- 2. 如何使用指針填充隨機數的二維數組
- 3. 用C++中的隨機數填充二維數組
- 4. 用隨機數字填充二維數組
- 5. 填充二維數組隨機整數相同數
- 6. 用隨機排列填充數組
- 7. 如何使用Linq對二維數組進行排序?
- 8. 幫助在二維數組中填充隨機數
- 9. 二維數組填充隨機數和輸出索引C++
- 10. 如何對基於二維數組的一維數組進行排序?
- 11. 用隨機字母填充二維數組
- 12. 用一行對二維數組排序
- 13. 將二維數組的行隨機排序 - NumPy
- 14. 對二維數組排序
- 15. 如何在Apps腳本中對二維數組進行排序
- 16. 如何在MATLAB中對一列進行二維數組排序?
- 17. 如何對二維數組進行排序?
- 18. 如何在C#中對二維數組進行排序?
- 19. 如何在C++中對二維數組進行排序
- 20. 二維數組填充
- 21. C++填充二維數組
- 22. 填充二維數組
- 23. Python:按數組長度對二維數組進行排序?
- 24. 如何用一個範圍內的隨機字母值填充二維數組
- 25. 隨機填充一個二維數組(Java)
- 26. 基於一行數據對二維數組進行排序
- 27. 如何使用相同的隨機排序對兩個數組進行排序
- 28. 用隨機數填充我的數組?
- 29. Javascript數組隨機填充
- 30. 如何使用多維數組中的值對多維數組進行排序?
您需要給出排序規則。是按第一維然後第二維排序? – Rotem