解释三种不同的排序算法的原理和时间复杂度。
冒泡排序的原理是通过不断交换相邻的元素来将最大的元素逐步“冒泡”到最后一位，直到所有元素都排序完毕。时间复杂度为 $O(n^2)$。

快速排序的原理是通过选取一个基准值，将数组划分成小于和大于基准值的两个子数组，然后对这两个子数组递归地进行快速排序。时间复杂度为 $O(nlogn)$。

归并排序的原理是将数组不断分成两半，对每一半进行排序后合并，再对合并后的数组继续进行分割和排序，直到排序完成。时间复杂度为 $O(nlogn)$。