2015-04-28 38 views
1

我正在編寫一個快速排序程序。部分quicksort涉及使用insertionsort,但它只對一定範圍內的元素進行排序,因爲quicksort處理其餘部分。我試圖模仿我的教科書提供的方法,使用使用插入排序僅對數組的一部分進行排序

public static void insertionSort(int a[], int left, int right) 

但我很努力弄清楚如何使用左和右。這是不使用左,右的參數插入排序代碼:

public static void insertionSort(int a[], int left, int right) { 
    int j; 
    for (int p = 1; p < a.length; p++) { 
     int tmp = a[p]; 
     for(j = p; j > 0 && tmp < a[j - 1]; j--) { 
      a[j] = a[j-1]; 
     } 
     a[j] = tmp; 
    } 
} 

如果我要加入左,右參數,以幫助排序只有數組的一部分,他們會在哪裏申請?

感謝您的幫助。

回答

3

使用左和右中的for循環的聲明:

public static void insertionSort(int a[], int left, int right) { 
    int j; 
    for (int p = left; p < right; p++) { 
     int tmp = a[p]; 
     for(j = p; j > 0 && tmp < a[j - 1]; j--) { 
      a[j] = a[j-1]; 
     } 
     a[j] = tmp; 
    } 
} 

例如輸入:插入排序({3,2,6,5,8,3,6,7,0},2,6)

輸出示例:{3,2,3,5,6,8,6,7,0}

編輯:

在上述示例中,左是包容性和右是排他性的。如果要包含正確的索引,請將p <更改爲p < = right。在調用索引編號從0開始的方法時請記住。

+0

我會解釋左右兩邊是包含還是排他性,並解釋左側和右側是基於零還是基於一個索引。 – Rainbolt

+1

感謝您的幫助。我嘗試過這種方式,並且遇到了一個小小的異常情況,而且排序不正確。我用p

+0

@Rainbolt這很好的澄清。約翰,這就是雨布要我澄清的事情。很高興你想出來了。 – Ryan