首页 > 编程知识 正文

冒泡排序算法流程图(简单选择排序算法)

时间:2023-05-03 19:47:49 阅读:68456 作者:1717

一、冒泡排序算法基本思想

比较第一个元素和第二个元素,如果相反,则交换两个元素,然后比较第二个元素和第三个元素。 依次类推,直到第n-1个元素和第n个元素比较。 上述过程称为第一个气泡排序,导致最大值的元素位于最后一个位置(第n个位置)。 然后进行第二次鼓泡对齐,对前n-1个元素也进行同样的操作,结果,第二大的元素配置在倒数第二的位置(n-1个位置)。

二、冒泡排序图解

黄色表示已排序的部分,蓝色表示未排序的部分。三、代码实现

打包软件; import java.util.Arrays; 公共类bubble sort { publicstaticvoidbubblesort (int [ ] arr ) for ) intI=0; iarr.length; I ) for(intj=I1; jarr.length; j ) if(arr[i]arr[j] )//如果前面的元素大于后面的元素,用临时变量temp进行交换(此排序为升序排序,降序排序为arr[I]arr[j] ) int temp=arr[i] arr[i]=arr[j]; arr[j]=temp; } } publicstaticvoidmain (string [ ] args ) int [ ] arr={ 3,9,- 1,10,20 }; System.out.println ('冒泡排序前); 系统. out.println (arrays.tostring (arr ) ); bubblesort(arr ); System.out.println ('通过鼓泡排序后) ); 系统. out.println (arrays.tostring (arr ) ); }运行结果:

从上面的照片可以看到,冒泡排序一共进行 arr.length-1次大循环,且每趟冒泡排序的次数在减少,因为每次确定一个元素在最后位置。

四、代码改进

如果数组本身是规则的,则不需要按循环进行判断,只要追加一个表示是否每次交换的标志位即可。

publicstaticvoidbubblesort (int [ ] arr ) {boolean flag=false; //标志位,标志是否被更换for(intI=0; iarr.length; I ) for(intj=I1; jarr.length; j () if ) arr[I]arr[j] ) /如果前面的元素大于后面的元素,用临时变量temp交换flag=true; //更换后标志为trueint temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; }if (! flag(//不更换直接breakbreak; }else {flag=false; //如果有更换,则下次判断}}} 五、冒泡排序算法性能测试

打包软件; 导入Java.text.simple date format; import java.util.Arrays; import java.util.Date; 公共类bubble sort { publicstaticvoidbubblesort (int [ ] arr ) {布尔标志=假; //标志位,标志是否被更换for(intI=0; iarr.length; I ) for(intj=I1; jarr.length; j () if ) arr[I]arr[j] ) /如果前面的元素大于后面的元素,用临时变量temp交换flag=true; //更换后标志为trueint temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; }if (! flag(//不更换直接breakbreak; }else {flag=false; //如果有更换,则下次判断} } publicstaticvoidmain (string [ ] args ) {int[] arr=new int[80000]; for(intI=0; i 80000; I () arr[I]=(int ) ) Math.random ) * 8000000 ); 生成//[ 0,800000 ]的数量(}Date date1=new Date ); simpledateformatsimpledateformat=newsimpledateformat (yyyy-mm-ddhh : mm : ss ); //SimpleDateFormat是用于设置和解析Java提供的日期的工具类string date1str=simple date format.format (date1); System.out.println ('气泡排序前的时间为' date1Str ); bubblesort(arr ); 日期数据2=new date (; string date2 str=简单数据格式.格式(date2; System.out.println ('气泡排序后的时间为' date2Str ); }鼓泡对齐前的时间为2021-01-31 11:38:30鼓泡对齐后的时间为2021-01-31 11:38:38鼓泡对齐测试80000个数据共需要8s左右。

PS :

)1)常用时间因素与字母对应表如下。

)2)一般输出格式的显示方法如下表所示。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。