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的結果,這與原始數組不同,但仍然沒有正確排序。對此有何想法?在此先感謝
編輯:
感謝您的答覆,我一直在尋找到邏輯,而不是基礎知識。
你的調試器告訴你什麼? –
嗯,一個問題是Java允許你用顯式整數編程,而JavaScript不能。那將是我首先看的東西。 – Pointy
沒有錯誤信息產生:-( –