C#使用指针对整数数组进行除法
所以我有一个快速排序算法,我必须把我的整数数组一分为二,然后递归地调用这两个数组C#使用指针对整数数组进行除法,c#,arrays,pointers,integer,C#,Arrays,Pointers,Integer,所以我有一个快速排序算法,我必须把我的整数数组一分为二,然后递归地调用这两个数组 partition(array,lower); partition(&array[lower + 1], array.Length - lower - 1); 但c#不会接受该代码,即使我尝试向分区类添加不安全的代码,所以我想知道必须做什么才能使其工作 也许我可以不使用指针来修复它,但我想学习,这样每当我遇到这样的问题时,我就不必为它更改整个代码。要使用不安全的代码,需要两件事: 用标记不安全代码(正如您
partition(array,lower);
partition(&array[lower + 1], array.Length - lower - 1);
但c#不会接受该代码,即使我尝试向分区类添加不安全的代码,所以我想知道必须做什么才能使其工作
也许我可以不使用指针来修复它,但我想学习,这样每当我遇到这样的问题时,我就不必为它更改整个代码。要使用不安全的代码,需要两件事:
array.Take(lower);
array.Skip(lower);
用
数组创建子数组的简便方法
private static void Main()
{
int[] array = Enumerable.Range(1, 10).ToArray();
int lower = 5;
int[] array1 = array.SubArray(0, lower);
int[] array2 = array.SubArray(lower, array.Length - lower);
}
public static T[] SubArray<T>(this T[] source, int sourceIndex, int length)
{
T[] result = new T[length];
Array.Copy(source, sourceIndex, result, 0, length);
return result;
}
private static void Main()
{
int[]数组=可枚举的.Range(1,10).ToArray();
int较低=5;
int[]array1=数组。子数组(0,更低);
int[]array2=array.SubArray(更低,array.Length-lower);
}
公共静态T[]子数组(此T[]源,int sourceIndex,int length)
{
T[]结果=新的T[长度];
复制(源、源索引、结果、0、长度);
返回结果;
}
“c#不会接受该代码”。。。上面写着“我不接受代码”吗?也许相反,它说的是更具信息性的东西?你不需要指针和不安全的代码。您可以通过稍微更改方法分区(数组,0,更低)来实现同样的功能
和分区(数组,下+1,array.Length-lower-1)代码>其他替代方案,如形成子数组或Linq,可能会影响性能。它有助于忘记c#中的指针,只是复制数据或生成迭代器;i、 e.IEnumerable’s但这就像用大炮杀死苍蝇:真的,首先你写的代码少了(总是好的)。其次,如果您使用了完美迭代器的功能,为什么要重新实现它?第三,迭代器不复制数据,它描述了如何遍历数据源;所以您已经优化了内存分配。