快速排序学过好几遍了,但是每一次学习都有不一样的收获。最近在学习快速排序时,又有了一点新的认识,准确的来说是真正的知道了快速排序的过程。
比如用快速排序对 45 36 66 90 45 10 25 88 进行排序,首先对这一组数进行分析,采用第一个数为关键字进行比较。
初始数据 45 36 66 90 45 10 25 88
↑ ↑
第一次交换 25 36 66 90 45 10 45 88
↑ ↑
第二次交换 25 36 45 90 45 10 66 88
↑ ↑
第三次交换 25 36 10 90 45 45 66 88
↑ ↑
第四次交换 25 36 10 45 45 90 66 88 (完成一趟交换)
完成一趟交换之后,再以之前的关键节点45为基准,左边数为一组,右边数为一组,以各组的第一个数为基准,进行第二趟的交换,如下:
第一趟交换后 【25 36 10 】 45 【 45 90 66 88 】
↑
↑ ↑ ↑
第一次交换 10 36 25 45 45 88 66 90
↑ ↑
第二次交换 10 25 36 45 45 88 66 90 (第二趟完成)
第二趟交换完成的序列为:【10】 25 【36 】45 45 【88 66 90】。一下交换按照新组进行比较和交换
注意:
1、在进行第二趟交换时,进行第一次交换的45与88不交换,自动后移,90与88交换,虽然此时都是用的90交换,但是关键字仍然是45,所以第二趟交换完的序列中45出来,后边的仍然分组。
2、快速排序属于不稳定排序,其空间复杂度和时间复杂度都是O(nlog2n)