冒泡排序和改进
来源:互联网 发布:高校教学软件租赁 编辑:程序博客网 时间:2024/06/05 03:02
冒泡排序和改进
冒泡排序思想:
将相邻的两个数做比较,如果不满足排序要求,则交换位置。具体有两种,一种就是从前往后相邻的比较,假设按照增序排,第一个跟第二个比,如果第一个大,则交换。然后将第二个和第三个位置的比。以此类推,一直比下去,这样一个轮回,可以将最大的那个数字送到最后一个位置。然后比较余下的。因此也称这种为“沉底法”。还有一种类似,就是从后往前比较,就是所谓的“冒泡法”,每一个轮回,将最小的那个数字送到了第一个元素的位置。
冒泡算法的改进:
记录每次交换的位置,当一次冒泡中无两个元素交换,则后面的部分已经有序,以后每轮比较不需要再次比较已经有序的部分。
java实现代码:下面代码以【沉底法】为例的代码。
package com.mytest.hw;public class BubbleSort {/** * 冒泡排序和冒泡排序的改进 */public static void main(String[] args) {int[] a={5,4,3,2,7,8,9,10};for (int i : a) {System.out.print(i+" ");}System.out.println("\n排序后:");//sortbubble1(a);sortbubble2(a);for (int i : a) {System.out.print(i+" ");}}//时间复杂度 O(n^2) 沉底private static void sortbubble1(int[] a) {for(int i=1;i<a.length;i++)for(int j=0;j<a.length-i;j++){if(a[j]>a[j+1]){a[j]=a[j]^a[j+1];a[j+1]=a[j]^a[j+1];a[j]=a[j]^a[j+1];}}}//冒泡的改进算法 private static void sortbubble2(int[] a) {int lastexchange=a.length-1;//记录最后一次交换的位置,第一次必须比较到最后int exchange=0;//记录每次交换的位置while(lastexchange>0){for(int j=0;j<lastexchange;j++){if(a[j]>a[j+1]){a[j]=a[j]^a[j+1];a[j+1]=a[j]^a[j+1];a[j]=a[j]^a[j+1];exchange=j;}}lastexchange=exchange;}}}
备注:
a[j]=a[j]^a[j+1];a[j+1]=a[j]^a[j+1];a[j]=a[j]^a[j+1];
如上代码为不引入第三个变量交换两个元素位置的方法;
冒泡法之沉底法实现如上代码,冒泡法之冒泡法原理类似,不再啰嗦了。
0 0
- 冒泡排序和改进
- 冒泡排序(改进)和选择排序
- 冒泡排序和改进的冒泡排序的性能差距
- 简单冒泡排序和它的改进
- 复习一下冒泡排序和其改进
- 冒泡法,改进冒泡法排序和反序算法
- 冒泡排序的改进
- 冒泡排序及其改进
- 冒泡排序的改进
- 冒泡排序改进-1
- 冒泡排序改进
- 冒泡排序改进版
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- c++ 冒泡排序改进
- 冒泡排序的改进
- 安装完成服务器进行优化
- css-position:absolute时如何居中
- 理解Jquery的first-of-type选择器
- 2017LinuxPHP+Mysql+nginx最详尽配置学习手册包括优化
- windows网络模型
- 冒泡排序和改进
- Ubuntu调教手册(软件安装sogou,chrome等)
- git commit message 工程实践
- 跨站请求伪造CSRF防护方法
- C#中的结构体要使用new来实例化吗?
- codevs1073 家族 并查集
- Software Testing Metrics
- linux下C语言多线程编程实例
- spring boot初探(一)——使用springboot搭建web服务