数据结构——排序算法2

2.交换排序

  • 快速排序
    • 快速排序思想为:以某一个元素为点,依次从右向左,从左向右进行比较。因此每次有一个数在最终位置。依次进行划分,递归进行排序。由于快速排序算法每次需要调换位置,因此是不稳定的。快速排序是所以排序算法里平均性能最优的算法。
      • 算法实现过程:(1)一遍快速排序方法,依次从右向左,找到比它小的,与之交换。然后从左向右,找到比它大的,与之交换。最后确定这个元素的值。一遍递归后,记录位置,然后分为0-位置,位置到最后,然后依次递归,从而确定每一个元素位置。(2)算法时间复杂度为o(nlog2n),由于递归占用了空间(递归工作栈保存每一层递归调用,其容量应与递归调用容量一致),因此,空间复杂度为O(n),平均情况下,栈的深度为O(lon2n),最坏为O(n)。(3)最差状态为全部有序。
  • 冒泡排序
    • 冒泡排序思想为:每次都选出一个最小的,放在它应该放的位置,然后依次选择。因此,每趟排序有一个数有序,排序之后,依次有序,为稳定排序.
      • 算法实现过程:(1)对于冒泡排序实现,则是使用两层for循环,外层for循环来依次后移,从当前位置开始。第二层for循环则为当前位置开始到最后,依次与当前值进行比较。如果发现比它小,则记录下比较值,记录下位置,一趟比完后,再来判断是否需要第一个位置和最小值位置。(这种实际为选择排序)如果采用比较之后,每次进行交换,则可以中间设置flag标志来判断,如果一趟排序,flag没有变,则跳出循环。也就是说,冒泡排序,从后往前,相邻的依次比较,如果比较结果大小不合适则交换,使得最小的像冒泡一样冒出来。设置flag之后,对于最佳情况,便于时间复杂度为O(n)。(2)算法时间复杂度为o(n2),空间复杂度为O(1)(3)最好状态为全部有序,此时flag没有发生变化,因此时间复杂度为O(n),最坏和平均一样为O(n2)。

3.选择排序

  • 简单选择排序
    • 简单选择排序就是我之前误以为的冒泡排序。即每一趟选择出最小的值,然后与关键字位置进行交换,每一趟可以确定一个元素的最终位置。这样经过n-1趟排序,就可以确定所有元素位置。算法为不稳定的。
      • 算法实现过程:(1)对于简单选择排序,两层for循环,一层为确定交换位置,另外一层为查找最小的元素。(2)算法时间复杂度为O(n2),空间复杂度为O(1)。(3)所有状态都需要查找最小的,所以一直为O(n2)。   
  • 堆排序
    • 堆排序借用了树的思想,  

4.归并排序

5.基数排序

posted @ 2017-03-23 11:32  请叫我土豆123  阅读(77)  评论(0)    收藏  举报