###前提
JavaScriptでクイックソートのコードを書きました。
###実現したいこと
現在のコードでは配列aだけに対応したfunctionになっています。
この関数を配列bなど他の配列に対応するためにはどのようにしたらよいでしょうか。
(汎用的にソートする配列を関数に渡すためにはどうしたらよいでしょうか)
###該当のソースコード
javascript
1function quickSort(startID,endID){ 2 var pivot = a[Math.floor((startID + endID)/2)]; 3 var left = startID; 4 var right = endID; 5 6 while(true){ 7 while(a[left]<pivot){ 8 left++; 9 } 10 while(pivot<a[right]){ 11 right--; 12 } 13 if(right <= left){ 14 break; 15 } 16 var tmp =a[left]; 17 a[left] =a[right]; 18 a[right] =tmp; 19 left++; 20 right--; 21 } 22 if(startID < left-1){ 23 quickSort(startID,left-1); 24 } 25 if(right+1 < endID){ 26 quickSort(right+1,endID); 27 } 28} 29 var a = [3,7,2,4,6,1,9,8,5]; 30 quickSort(0,a.length-1); 31 console.log(a);
追々記
再帰のところで止まってしまうようです。。。
間違っているところを指摘いただければ幸いです。
javascript
1function startQuickSort(a, startID, endID){ 2 function quickSort(startID, endID){ 3 var pivot = a[Math.floor((startID + endID)/2)]; 4 var left = startID; 5 var right = endID; 6 7 while(true){ 8 while(a[left]<pivot){ 9 left++; 10 } 11 while(pivot<a[right]){ 12 right--; 13 } 14 if(right <= left){ 15 break; 16 } 17 var tmp =a[left]; 18 a[left] =a[right]; 19 a[right] =tmp; 20 left++; 21 right--; 22 } 23 if(startID < left-1){ 24 quickSort(startID,left-1); 25 } 26 if(right+1 < endID){ 27 quickSort(right+1,endID); 28 } 29 } 30 31 quickSort(a, startID, endID); 32 33} 34 35var a = [3,7,2,4,6,1,9,8,5]; 36startQuickSort(a, 0, a.length-1); 37console.log(a);
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/05 08:22
2016/12/05 09:02