আমার একটি বাছাই করা জাভাস্ক্রিপ্ট অ্যারে রয়েছে এবং অ্যারেতে আরও একটি আইটেম সন্নিবেশ করতে চাই যেমন ফলাফলযুক্ত অ্যারে বাছাই করা থাকে। আমি অবশ্যই একটি সাধারণ কুইকোর্ট-স্টাইল সন্নিবেশ ফাংশনটি বাস্তবায়িত করতে পারি:
var array = [1,2,3,4,5,6,7,8,9];
var element = 3.5;
function insert(element, array) {
array.splice(locationOf(element, array) + 1, 0, element);
return array;
}
function locationOf(element, array, start, end) {
start = start || 0;
end = end || array.length;
var pivot = parseInt(start + (end - start) / 2, 10);
if (end-start <= 1 || array[pivot] === element) return pivot;
if (array[pivot] < element) {
return locationOf(element, array, pivot, end);
} else {
return locationOf(element, array, start, pivot);
}
}
console.log(insert(element, array));
[সতর্কতা] অ্যারের শুরুতে সন্নিবেশ করানোর চেষ্টা করার সময় এই কোডটিতে একটি ত্রুটি রয়েছে, উদাহরণস্বরূপ insert(2, [3, 7 ,9]
) ভুল উত্পাদন করে [3, 2, 7, 9]।
তবে, আমি লক্ষ করেছি যে অ্যারে.সোর্ট ফাংশনের বাস্তবায়ন সম্ভবত আমার জন্য এবং নেটিভভাবে এটি করতে পারে:
var array = [1,2,3,4,5,6,7,8,9];
var element = 3.5;
function insert(element, array) {
array.push(element);
array.sort(function(a, b) {
return a - b;
});
return array;
}
console.log(insert(element, array));
দ্বিতীয়টির চেয়ে প্রথম বাস্তবায়নটি বেছে নেওয়ার কোনও ভাল কারণ আছে কি?
সম্পাদনা : নোট করুন যে সাধারণ ক্ষেত্রে, একটি ও (লগ (এন)) সন্নিবেশ (প্রথম উদাহরণ হিসাবে প্রয়োগ করা হয়) জেনেরিক বাছাইকরণ অ্যালগরিদমের তুলনায় দ্রুত হবে; তবে এটি বিশেষত জাভাস্ক্রিপ্টের ক্ষেত্রে প্রয়োজন হয় না। মনে রাখবেন যে:
- বেশ কয়েকটি সন্নিবেশ অ্যালগোরিদমের জন্য সর্বোত্তম কেস হল ও (এন), যা এখনও ও (লগ (এন)) থেকে উল্লেখযোগ্যভাবে পৃথক, তবে ও (এন লগ (এন)) এর মতো নীচে উল্লিখিত হিসাবে খারাপ নয়। এটি ব্যবহৃত নির্দিষ্ট বাছাই করা অ্যালগরিদমে নেমে আসবে ( জাভাস্ক্রিপ্ট অ্যারে.সোর্ট বাস্তবায়ন দেখুন? )
- জাভাস্ক্রিপ্টে বাছাইয়ের পদ্ধতিটি একটি দেশীয় ফাংশন, সুতরাং সম্ভাব্য আকারে বিশাল সুবিধাগুলি উপলব্ধি করতে - ও (লগ (এন)) যুক্তিযুক্ত আকারের ডেটা সেটগুলির জন্য ও (এন) এর চেয়ে আরও খারাপ হতে পারে।
splice()
(যেমন আপনার প্রথম উদাহরণ) ইতিমধ্যে ও (এন)। এমনকি যদি এটি অভ্যন্তরীণভাবে পুরো অ্যারেটির একটি নতুন অনুলিপি তৈরি না করে, তবে উপাদানটি পজিশনে inোকাতে হলে এটি সমস্ত n আইটেমকে 1 পজিশন ফিরিয়ে রাখতে হবে সম্ভবত এটি দ্রুত কারণ এটি একটি নেটিভ ফাংশন এবং ধ্রুবকটি রয়েছে কম, তবে এটি ও (এন) তবে।
parseInt
ব্যবহার Math.floor
পরিবর্তে। Math.floor
এর চেয়ে অনেক বেশি দ্রুত parseInt
: jsperf.com/test-parseint-and-math-floor