美文网首页
三种冒泡算法

三种冒泡算法

作者: 晚云落 | 来源:发表于2018-01-30 16:41 被阅读8次

package yunnex.mobile;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import yunnex.foundation.base.entity.Province;
import yunnex.foundation.base.service.ProvinceService;
import yunnex.saofu.mall.constants.MallProductOrderStatus;
import yunnex.saofu.mall.dto.order.MallProductOrderDto;
import yunnex.saofu.mall.service.order.ExtProductOrderService;

import java.lang.reflect.Array;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;

public class TestMath {

/**
 * 冒泡排序的第一种实现, 没有任何优化
 * @param a
 * @param n
 */
private static void BubbleSort1(int [] a, int n){
    int i, j;
    int num=0;
    for(i=0; i<n; i++){  //表示n次排序过程。
        for(j=1; j<n-i; j++){
            if(a[j-1] > a[j]){//前面的数字大于后面的数字就交换
                //交换a[j-1]和a[j]
                int temp;
                temp = a[j-1];
                a[j-1] = a[j];
                a[j]=temp;
            }
            num++;
        }
    }
    System.out.println("num:"+num);
}

/**
 * 设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。
 * @param a
 * @param n
 */
private static void BubbleSort2(int [] a, int n){
    int j, k = n;
    boolean flag = true;//发生了交换就为true, 没发生就为false,第一次判断时必须标志位true。
    while (flag){
        flag=false;//每次开始排序前,都设置flag为未排序过]
        for(j=1; j<k; j++){
            if(a[j-1] > a[j]){//前面的数字大于后面的数字就交换
                //交换a[j-1]和a[j]
                int temp;
                temp = a[j-1];
                a[j-1] = a[j];
                a[j]=temp;
                //表示交换过数据;
                flag = true;
            }
        }
        k--;//减小一次排序的尾边界
    }
}

/**
 * 设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。
 * @param a
 * @param n
 */
private static void BubbleSort3(int [] a, int n){
    int j, k;
    int flag = n;
    while (flag>0){
        k=flag;
        flag=0;//每次开始排序前,都设置flag为未排序过]
        for(j=1; j<k; j++){
            if(a[j-1] > a[j]){//前面的数字大于后面的数字就交换
                int temp;
                temp = a[j-1];
                a[j-1] = a[j];
                a[j]=temp;

                //表示交换过数据;
                flag = j;
            }
        }
    }
}



public static void main(String[] args) {
    int[] arr = {1,1,2,0,9,3,12,7,8,3,4,65,22};
    long time1=System.nanoTime();
    BubbleSort1(arr, arr.length);
    long time2=System.nanoTime();
    System.out.println("time1:"+(time2-time1));
    long time3=System.nanoTime();
    BubbleSort2(arr, arr.length);
    long time4=System.nanoTime();
    System.out.println("time2:"+(time4-time3));
    long time5=System.nanoTime();
    BubbleSort3(arr, arr.length);
    long time6=System.nanoTime();
    System.out.println("time3:"+(time6-time5));

    System.out.println(Arrays.toString(arr));
}

}

相关文章

  • 冒泡与选择排序

    优化版冒泡排序 选择排序 数据交换常用三种算法对比

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • 三种冒泡算法

    package yunnex.mobile; import org.junit.Test;import org.j...

  • 算法学习之简单排序

    简单排序 简单排序有三种, 冒泡排序,选择排序,插入排序 冒泡排序 冒泡排序是一种易于实现的排序算法, 以升序为例...

  • 1.1-交换排序-冒泡

    参考链接 交换排序:冒泡排序(Bubble Sort) 白话经典算法系列之一 冒泡排序的三种实现 基本思想 以从小...

  • 书本常见的三种排序算法

    书本常见的三种排序算法 冒泡排序 冒泡排序重在相邻的两个数进行比较,从头开始。每次比较都会把小的数冒泡排到前面,大...

  • 冒泡算法

    一、常用冒泡算法 二、优化冒泡算法

  • 基本算法——快速排序算法

    快速排序算法是对冒泡算法的改进。所以我们首先来简单的谈谈冒泡算法。 1.冒泡算法 冒泡排序(Bubble S...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

网友评论

      本文标题:三种冒泡算法

      本文链接:https://www.haomeiwen.com/subject/zmmczxtx.html