交换式排序法之冒泡排序法实现-java版

//这里涉及一个数组引用的传递,在DemoBubble类里面对Bubble类Sort方法调用传递了一个数组应用,在Sort方法里面对数组的更改都会更改实参。这就类似于C语言里面传递的数组地址。

package com.PengRong.A;

import java.util.*;

public class DemoBubble {

 public static void main(String[] args)
 {
  // TODO Auto-generated method stub
  //随机产生十万个测试数据
  int len=100000;
  int[] arr =new int[len];
  for(int i=0; i<len; i++)
  {
   int t =(int)(Math.random()*10000);
   arr[i] =t;
  }

  Bubble bubble =new Bubble();
  bubble.Test();
  bubble.Sort(arr);
  bubble.Test();
  /*for(int i=0; i<arr.length; i++)
  {
   System.out.println("arr[" +i+ "]="+arr[i]);
  }
*/
 }

}
/**
 * @功能:冒泡排序实现,没有记录每趟是否有交换数据的行为
 * 冒泡排序的核心思想重复的从开始到末端遍历数组,
 *  每次遍历排序后都使得当前待排序数据组中最大值排到合适的最后位置,
 * 比如第一趟排序是最大数到最后
 * @author PengRong
 *
 */
class Bubble
{
 public void Test()
 {
  Calendar cal =Calendar.getInstance();
  System.out.println(cal.getTime());
 }
 /**
  * @author PengRong
  * @Function 冒泡排序的实现算法,实现对一个int型数组的数字按从小到大排序
  * @param arr
  */
 public void Sort(int[] arr)
 {
  int temp =0;
  //外层循环控制冒泡排序总共需要走几趟
  for(int i=0; i<arr.length-1; i++)
   {
    //内层循环控制每趟排序需要做多少次比较,arr.length-1指的是最大可执行比较次数
    //因为每趟都会在数组末端沉淀一个最大数所以减去i
    for(int j=0; j<arr.length-1-i; j++)
    {
     if(arr[j]>arr[j+1])
     {
      temp = arr[j];
      arr[j] = arr[j+1];
      arr[j+1] =temp;

     }
    }
   }

 }
}

/**
相比上一次的改进是增加了一个记录字段exchange
*/
public static void bubbleSort(int[] table) {
        boolean exchange = true;// 一趟比较下来是否交换的标记
        for (int i = 1; i < table.length && exchange; i++) {// 总共比较n-1趟,每趟使得的最大值在沉入数组下面
            exchange = false;// 标记还没有交换
            for (int j = 0; j < table.length - i; j++) // 每趟比较n-i次
                if (table[j] > table[j + 1]) {
                    int temp = table[j];
                    table[j] = table[j + 1];
                    table[j + 1] = temp;
                    exchange = true;
                }
        }
    }

该历程实现了对系统时间的显示,以观察冒泡排序法的时间复杂度
当int len =10000时候,用时看不到明显流失。

当int len =80000时候,用时22s,时间已经很多了。

当int len = 100000时候,用时高达26s;确实很慢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值