c# - comparing 1 million integers in an array without sorting it first -


i have task find difference between every integer in array of random numbers , return lowest difference. requirement integers can between 0 , int.maxvalue , array contain 1 million integers. put code works fine small amount of integers takes long time (so long of time give waiting) million. code below, im looking insight on how can improve performance.

for(int = 0; < _randomintegerarray.count(); i++) {   for(int ii = + 1; ii < _randomintegerarray.count(); ii++) {     if (_randomintegerarray[i] == _randomintegerarray[ii]) continue;      int currentdiff = math.abs(_randomintegerarray[i] - _randomintegerarray[ii]);      if (currentdiff < lowestdiff) {       pairs.clear();     }      if (currentdiff <= lowestdiff) {       pairs.add(new numberpair(_randomintegerarray[i], _randomintegerarray[ii]));       lowestdiff = currentdiff;     }   } } 

apologies has pointed out dont sort. unfortunately sorting not allowed.

imagine have found pair of integers a , b random array such a > b , a-b lowest among possible pairs of integers in array.

does integer c exist in array such a > c > b, i.e. c goes between a , b? clearly, answer "no", because otherwise you'd pick pair {a, c} or {c, b}.

this gives answer problem: a , b must next each other in sorted array. sorting can done in o(n*log n), , search can done in o(n) - improvement on o(n2) algorithm have.


Comments

Popular posts from this blog

python Tkinter Capturing keyboard events save as one single string -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

javascript - Z-index in d3.js -