冒泡排序 一个java例程

简介 最近在学习数据结构,准备重新写一遍有关算法的例程,算是重新开始吧,这不就从冒泡开始啦。。。。。

冒泡排序的算法的思想其实很简单就是逐个比较交换位次从而实现一个完整的排序,下面直接看代码吧。

package algorithm;


import java.text.SimpleDateFormat;

import java.util.Date;


/*

 * 时间:2019 8 22

 * 作者:latefly

 * 功能:一个冒泡排序的展示,包含一个原始的方法以及一个优化以后的方法

 * 

 * 

 **/

public class BubleSort {

static int counter = 0;

static int arrSize = 80000;// 此处实测大概是19-22之间


public static void main(String args[]) {


int arr[] = new int[arrSize];

for (int i = 0; i < arrSize; i++) {

arr[i] = (int) (Math.random() * 8000000);

}


// baseSort(arr);

Date dateStart = new Date();

SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-DD hh:mm:ss");

String start = format.format(dateStart);

System.out.println("开始时间:" + start);

// 开始排序

rectifySort(arr);


Date endStart = new Date();

String end = format.format(endStart);

System.out.println("结束时间:" + end);

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

}


// 一个基本的展示冒泡排序

public static void baseSort(int arr[]) {

int i, j, temp;

for (i = 0; i < arr.length - 1; i++) {

for (j = 0; j < arr.length - 1; j++) {

if (arr[j] > arr[j + 1]) {

temp = arr[j + 1];

arr[j + 1] = arr[j];

arr[j] = temp;

counter++;


}

}


}

}


// 此处的排序是经过优化的,change用于判断每一轮是否有交换发生

// 如果没有那么就是排序已经完成

public static void rectifySort(int arr[]) {

int i, j, temp;

boolean change = true;

for (i = 0; i < arr.length - 1; i++) {

                        change=true;

for (j = 0; j < arr.length - 1 - i; j++) {

if (arr[j] > arr[j + 1]) {

temp = arr[j + 1];

arr[j + 1] = arr[j];

arr[j] = temp;

counter++;

change = false;

}

}

if (change)

break;

}

}

}

这是十个数据的测试

image.png

这是80000个随机数据的一个测试可以看到用了19s(非精确时间)    

image.png

文章评论

Top