2013-03-24 73 views
1

我想在c#中实现合并排序来尝试和学习语言。我在划分步骤中分割阵列时遇到问题。我来自c背景,并会做这样的事情:c#处理像指针的数组

void MergeSort(int array[], int size) 
{ 
    if (size == 1) 
     return; 
    MergeSort(array, size/2); 
    MergeSort(array + size/2, size - size/2); 
} 

我的问题是,你可以做类似的c#?我知道有采取和跳过方法,但这是最好的方法吗?

+1

有几件事情 - 你可以使用'名单'的而非阵列(它是一个类,因此参考是通过价值传递的)。虽然你可以使用[unsafe]指针(http://msdn.microsoft.com/en-gb/library/chfa2zb8.aspx),但这不是真正的C#方法。 – Oded 2013-03-24 12:08:04

+0

@代码所以在C#中是一个数组的值类型? – 2013-03-24 12:13:11

+0

我的观点更重要的是调整大小它更合适。数组不常用于C#中的其他集合类型。数组是参考类型。 – Oded 2013-03-24 12:14:23

回答

9

使用索引而不是指针。

void MergeSort(int[] array, int startIndex, int endIndex){ 
... 
} 
2

也许你可以通过你想要使用的功能指标:

private static void MergeSort(int[] array, int size, int index) { 
    if (size == 1) { 
     return; 
    } 
    MergeSort(array, size/2, index); 
    MergeSort(array, size - size/2, index + size/2); 
}