2015-10-13 31 views
0

我剛發現一個奇怪的問題。我試圖使用JavaScript來實現基於用Java編寫的代碼的快速排序,但結果並不符合我的預期。 Java代碼:JavaScript和Java中的Quicksort

public class Sort { 
    public static void main (String[] args){ 
     int[] number = {1,10,2,2,2,3,5,7,8,2}; 
     for (int i = 0; i < number.length ; i++) { 
      System.out.println(quickSort(number)[i]);//1,2,2,2,2,3,5,7,8,10 
     } 
    } 
    static int[] quickSort(int[] number){ 
     int length = number.length; 
     int start = 0; 
     int end = length -1; 
     number = quick_sort (start,end,number); 
     return number; 
    } 
    private static int[] quick_sort(int start,int end,int[] number) { 

     int pivot = number[(start+end)/2]; 
     int s = start; 
     int e = end; 
     while (s <= e) { 
      while(number[s] < pivot) { 
       s++; 
      } 
      while(number[e] > pivot) { 
       e--; 
      } 
      //swap the value 
      if (s <= e) { 
       int temp = number[s]; 
       number[s] = number[e]; 
       number[e] = temp; 
       //move both sides cursor 
       s++; 
       e--; 
      } 

     } 

     // recursively sorting lower half 
     if (start < e) { 
      quick_sort(start, e, number); 
     } 
     //recursively sorting higher half 
     if (end > s) { 
      quick_sort(s, end, number); 
     } 
     return number; 
    } 
} 

的JavaScript:

用Java編寫的
function main() { 
    var numbers = [1,10,2,2,2,3,5,7,8,2]; 
    var length = numbers.length; 
    var start = 0; 
    var end = length - 1; 
    alert(quickSort(start, end, numbers));//2,3,5,8,7,2,1,2,2,10 <----- not sorted 
} 

function quickSort(start, end, numbers) { 
    var s,e,temp,pivot; 
    s = start; 
    e = end; 
    pivot = numbers[(start+end)/2]; 
    while(s<=e){ 
     while(numbers[s] < pivot) { 
      s++; 
     } 
     while(numbers[e] > pivot) { 
      e--; 
     } 
     if(s<=e) { 
      temp = numbers[s]; 
      numbers[s] = numbers[e]; 
      numbers[e] = temp; 
      e--; 
      s++; 
     } 
    } 
    if(start < e) { 
     quickSort(start, e, numbers); 
    } 
    if(end > s) { 
     quickSort(s, end, numbers); 
    } 
    return numbers; 
} 
main(); 

代碼給出的1,2,2,2,2,3,5,7,8,10結果,在其他硬件,用JavaScript編寫的代碼產生2,3,5,8,7,2,1,2,2,10的結果,這與原始數組不同,但仍然沒有正確排序。對此有何想法?在此先感謝

編輯:

感謝您的答覆,我一直在尋找到邏輯,而不是基礎知識。

+0

你的調試器告訴你什麼? –

+0

嗯,一個問題是Java允許你用顯式整數編程,而JavaScript不能。那將是我首先看的東西。 – Pointy

+0

沒有錯誤信息產生:-( –

回答

5

(start+end)/2不一定是JS中的整數。它適用於Math.floor((start+end)/2)