冒泡排序法流程图讲解,冒泡排序法详细讲解

首页 > 教育 > 作者:YD1662024-05-15 14:50:31


而多次排序每次的结果是这样的:

冒泡排序法流程图讲解,冒泡排序法详细讲解(5)


它的动态执行顺序为:

冒泡排序法流程图讲解,冒泡排序法详细讲解(6)

代码

在具体实现的时候,要分清是从小到大还是从大到小,还有次数也要注意,谨防越界
至于冒泡排序的关键代码为:

    private static void  maopaosort(int[] a) {         // TODO Auto-generated method stub         for(int i=a.length-1;i>=0;i--)         {             for(int j=0;j<i;j )             {                 if(a[j]>a[j 1])                 {                     int team=a[j];                     a[j]=a[j 1];                     a[j 1]=team;                 }             }         }     }

快速排序

介绍

快速排序是对冒泡排序的一种改进,采用递归分治的方法进行求解。而快排相比冒泡是一种不稳定排序,时间复杂度最坏是O(n^2^),平均时间复杂度为O(nlogn),最好情况的时间复杂度为O(nlogn)。

分析

对于快排来说,基本思想是这样的

快排需要将序列变成两个部分,就是序列左边全部小于一个数序列右面全部大于一个数,然后利用递归的思想再将左序列当成一个完整的序列再进行排序,同样把序列的右侧也当成一个完整的序列进行排序。

其中这个数在这个序列中是可以随机取的,可以取最左边,可以取最右边,当然也可以取随机数。但是通常我们取最左边的那个数。当然,为了实现这个目标,实现方式可能不一样,但是我这里采取的是大众常规的方式和方法。!

冒泡排序法流程图讲解,冒泡排序法详细讲解(7)

这里的一个难题就是如何处理将比第一个数K小的全部放左面,把比K大的全部放右面!如果没有什么技巧,直接硬性往里面塞,你肯定要一个额外存储空间先把整个先存了。然后遍历比较然后放入目标区域。当然这样太浪费空间内存了。我们为了节省计算机资源,采取这样的方法:

  1. 先用一个空间标记这个最左侧的数K。然后先从右往左high--先找到一个比这个K小的数a[high],把这个a[high]放到a[low]位置(因为这个a[low]的初始K已经被额外空间记录过,不用担心)。
  2. 这样右侧不符合要求小于K的已经调到最左侧了,我们再从左侧向右low 一直到a[low]>K.也就是找到第一个比K大的数,它在左侧不符合要求所以我们把它移动到右侧,而我们刚刚所说的a[high]已经被赋值移到左侧,所以我们把这个a[low]大于K的数值移动到右端a[high]处,这样又保证high右侧全部大于K,low左侧全部小于K。
  3. 就又开始重复第一步啦一直到low>high为止(即所有左侧都小于K,右侧都大于K)。

对于一个序列的2,8,3,7,6,9,4,12来说,它的执行过程图解大致是这样的:
1 . 首先2是最小的,采用递归分治时候左侧相当于为空,只需要把右侧再进行排序。

冒泡排序法流程图讲解,冒泡排序法详细讲解(8)

上一页1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.