If I have a function that is quadratic complexity, i.e. the runtime is directly proportional to the square of the input size.  How would I identify its best or worse case runtime, specifically how do I determine if the best and worst case are the same?
This really depends on your algorithm and your input data. For example
a search algorithm can have a typically runtime of O(x^2) but in certain situations this differs:

Typically runtime is for statistically random data (normal case)

If the input data is already sorted (best case), then it depends on the algorithm if it still has normal runtime or is faster e.g. O(1)

If the input data is shaped explicitly in the worst order that there is possible for this specific algorithm (but not very likely), then it may have a bigger worst-case O-notation


Which algorithm you choose then depends on your use case:

If the data is most likely already sorted or partially sorted: You may go with an algorithm that has better best case runtime
If you want fastest results in most cases (with unsorted data): You go for best normal case
If your algorithm may kill someone if it takes to long (e.g. dealing with malicious user input): You will choose one which as equal normal/worst case runtime
Calculating best-case, worse-case Complexity