How to sort an array using minimum number of writes?

后端 未结 5 1905
再見小時候
再見小時候 2020-12-23 18:10

My friend was asked a question in his interview:

The interviewer gave him an array of unsorted numbers and asked him to sort. The restriction is that the number of w

5条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-23 18:36

    The ordering I meant in O(n) is like the selection sort(the previous post) useful when you have a small range of keys (or you are ordering numbers between 2 ranges)

    If you have a number array where numbers will be between -10 and 100, then you can create an array of 110 and be sure that all numbers will fit in there, if you consider repeated numbers the idea is the same, but you will have lists instead of numbers in the sorted array

    the pseudo-idea is like this

    N: max value of your array
    tosort //array to be sorted
    sorted = int[N]
    
    for i = 0 to length(tosort)
    do
       sorted[tosort[i]]++;
    end
    
    finalarray = int[length(tosort)]
    
    k = 0
    for i = 0 to N
    do
      if ( sorted[i] > 0 )
        finalarray[k] = i
        k++;
      endif
    end
    

    finalarray will have the final sorted array and you will have o(N) write operations, where N is the range of the array. Once again, this is useful when using keys inside a specific range, but perhaps its your case.

    Best regards and good luck!

提交回复
热议问题