2013-03-24 76 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); 
}