You (or your wallet, or both... depending of your wallet and your settings) choose the fees you like (the wallet could guesstimate based on the current congestion and your time preference).
The miners then choose the transactions they want to include in a way, as to maximize their gains. As a block can only hold a certain amount of transactions and the limit being set by the weight-units [1], miners will want to prioritize the transactions that offer them bigger fees per weight unit, or usually expressed as sats/vbyte (satoshis per virtual bytes).
So if you don't need a transaction to arrive in the next 1-2 hours, you can lower your fees, and the transaction might pass in the night (although BTC is international, congestion is less on US night time and especially week-ends) or if not, probably in the week-end. If it doesn't clear fast enough, or as fast as hoped, then RBF (replace-by-fee) or CPFP (child-pays-for-parent) might help (manually or an increase of the fee could be automated by the wallet every set amount of time).
TL;DR: there is a free market for transactions, but the price is not dictated by the market (and there is no real bidding system), instead you suggest a fee, and see if any miner around the world wants to include it in a block (and you can adjust if the outcome isn't achieved, which has similar results to a bidding system... but is more like natural supply/demand mechanism, as miner do not guarantee to include a transaction).
Helpful to see current unconfirmed transactions (and sats/vbyte):
https://jochen-hoenicke.de/queue/#0,30d
[info: the legend is clickable, and makes it easier to view how many higher paying transactions there are]
[1]: https://en.bitcoin.it/wiki/Weight_units