Java冒泡排序法和选择排序法的实现

网友投稿 228 2022-12-27


Java冒泡排序法和选择排序法的实现

冒泡排序法和选择排序法

本人学生党一枚。java学习过程,写这个博客纯属当复习,有什么错误的地方请大家指出来在评论里指点指点我。谢谢

冒泡排序法

概念:

从前向后(或从后向前)依次比较相邻的元素,若发现逆顺序,则交换。小的向前换,大的向后换,像水底的气泡逐渐向上冒,顾名思义冒泡排序法。

通俗一点就是把大的往上挪!向冒泡一样。

是交换式排序法的一种。冒泡排序法效率较低。

冒泡排序法思路

1:外层循环:控制它要走几次。

假设你有5个数,那就要走4次,最后一次不用走,最后那个数已经在它位置了所以就要length-1次。

2:内层循环:控制逐一比较,如果发现前一个数比后一个数大,则交换。

注意!因为越比较长度就越小了,所以长度要length-1-i。

package com.test_1;

public class Demo5_3 {

public static void main(String[] args) {

// TODO Auto-generated method stub

int arr [ ] ={1,6,0,-1,9};

int temp=0;//中间值

//-------冒泡排序法

//外层循环,它决定一共走几趟

for(int i = 0;i

//内层循环,开始逐个比较

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

//输出结果

for(int i = 0;i

System.out.print(arr[i]);

}

}

}

选择排序法

概念:

第一次从R[0]~R[n-1]中选取最小值,与R[0]交换。第二次从R[1]~R[n-1]中选取最小值与R[1]交换。。。以此类推。

通俗点说就是每次找到后面元素的最小值然后与之交换。

选择排序法效率中。

选择排序思路

1:外层循环:要走几http://趟,同样是length-1。

2:设置一个最小值。假设第一个就是最小值。

3:设置一个最小值下标

4:内层循环:那你当前的最小值去逐一比较。当有比当前最小值小的数时,记录最小值,记录下标。

5:退出内层循环后就交换位置。

package com.test_1;

public class Demo5_3 {

public static void main(String[] args) {

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//调用选择排序法

Select select = new Select();

select.sort(arr);

}

}

//--------------选择排序法

class Select{

public void sort(int arr[]){

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较

for(int k=j+1;k

//找到最小值

if (min>arr[k]) {

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}

}

}

最后再比较一下两个排序法之间的效率差异:

代码

package com.test_1;

import java.util.Calendar;

public class Demo5_3 {

public static void main(String[] args) {

//构建一个庞大的无序数组用于测试时间

int len=100000;

int arr1 [] = new int [len];

for(int i=0;i

//让程序随机产生一个1~10000的数

//Math.random()会产生一个0~1的数

int t = (int)(Math.random()*10000);

arr1[i] = t;

}

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//获得时间实例

Calendar cal = Calendar.getInstance();

//在排序前打印系统时间

System.out.println("冒泡排序法开始"+cal.getTime());

//调用冒泡排序法

Bubble bubble = new Bubble();

bubble.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("冒泡排序法结束"+cal.getTime());

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法开始"+cal.getTime());

//调用选择排序法

Select select = new Select();

select.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法结束"+cal.getTime());

}

}

//-----------------冒泡排序法

class Bubble{

//排序方法

public void sort(int arr[]){

int temp=0;//中间值

//-------冒泡排序法

//外层循环,它决定一共走几趟

for(int i = 0;i

//内层循环,决定每一趟循环的次数

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

//内层循环,开始逐个比较

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

//输出结果

for(int i = 0;i

System.out.print(arr[i]);

}

}

}

选择排序法

概念:

第一次从R[0]~R[n-1]中选取最小值,与R[0]交换。第二次从R[1]~R[n-1]中选取最小值与R[1]交换。。。以此类推。

通俗点说就是每次找到后面元素的最小值然后与之交换。

选择排序法效率中。

选择排序思路

1:外层循环:要走几http://趟,同样是length-1。

2:设置一个最小值。假设第一个就是最小值。

3:设置一个最小值下标

4:内层循环:那你当前的最小值去逐一比较。当有比当前最小值小的数时,记录最小值,记录下标。

5:退出内层循环后就交换位置。

package com.test_1;

public class Demo5_3 {

public static void main(String[] args) {

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//调用选择排序法

Select select = new Select();

select.sort(arr);

}

}

//--------------选择排序法

class Select{

public void sort(int arr[]){

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较

for(int k=j+1;k

//找到最小值

if (min>arr[k]) {

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}

}

}

最后再比较一下两个排序法之间的效率差异:

代码

package com.test_1;

import java.util.Calendar;

public class Demo5_3 {

public static void main(String[] args) {

//构建一个庞大的无序数组用于测试时间

int len=100000;

int arr1 [] = new int [len];

for(int i=0;i

//让程序随机产生一个1~10000的数

//Math.random()会产生一个0~1的数

int t = (int)(Math.random()*10000);

arr1[i] = t;

}

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//获得时间实例

Calendar cal = Calendar.getInstance();

//在排序前打印系统时间

System.out.println("冒泡排序法开始"+cal.getTime());

//调用冒泡排序法

Bubble bubble = new Bubble();

bubble.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("冒泡排序法结束"+cal.getTime());

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法开始"+cal.getTime());

//调用选择排序法

Select select = new Select();

select.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法结束"+cal.getTime());

}

}

//-----------------冒泡排序法

class Bubble{

//排序方法

public void sort(int arr[]){

int temp=0;//中间值

//-------冒泡排序法

//外层循环,它决定一共走几趟

for(int i = 0;i

//内层循环,决定每一趟循环的次数

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

//输出结果

for(int i = 0;i

System.out.print(arr[i]);

}

}

}

选择排序法

概念:

第一次从R[0]~R[n-1]中选取最小值,与R[0]交换。第二次从R[1]~R[n-1]中选取最小值与R[1]交换。。。以此类推。

通俗点说就是每次找到后面元素的最小值然后与之交换。

选择排序法效率中。

选择排序思路

1:外层循环:要走几http://趟,同样是length-1。

2:设置一个最小值。假设第一个就是最小值。

3:设置一个最小值下标

4:内层循环:那你当前的最小值去逐一比较。当有比当前最小值小的数时,记录最小值,记录下标。

5:退出内层循环后就交换位置。

package com.test_1;

public class Demo5_3 {

public static void main(String[] args) {

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//调用选择排序法

Select select = new Select();

select.sort(arr);

}

}

//--------------选择排序法

class Select{

public void sort(int arr[]){

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较

for(int k=j+1;k

//找到最小值

if (min>arr[k]) {

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}

}

}

最后再比较一下两个排序法之间的效率差异:

代码

package com.test_1;

import java.util.Calendar;

public class Demo5_3 {

public static void main(String[] args) {

//构建一个庞大的无序数组用于测试时间

int len=100000;

int arr1 [] = new int [len];

for(int i=0;i

//让程序随机产生一个1~10000的数

//Math.random()会产生一个0~1的数

int t = (int)(Math.random()*10000);

arr1[i] = t;

}

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//获得时间实例

Calendar cal = Calendar.getInstance();

//在排序前打印系统时间

System.out.println("冒泡排序法开始"+cal.getTime());

//调用冒泡排序法

Bubble bubble = new Bubble();

bubble.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("冒泡排序法结束"+cal.getTime());

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法开始"+cal.getTime());

//调用选择排序法

Select select = new Select();

select.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法结束"+cal.getTime());

}

}

//-----------------冒泡排序法

class Bubble{

//排序方法

public void sort(int arr[]){

int temp=0;//中间值

//-------冒泡排序法

//外层循环,它决定一共走几趟

for(int i = 0;i

//内层循环,决定每一趟循环的次数

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

System.out.print(arr[i]);

}

}

}

选择排序法

概念:

第一次从R[0]~R[n-1]中选取最小值,与R[0]交换。第二次从R[1]~R[n-1]中选取最小值与R[1]交换。。。以此类推。

通俗点说就是每次找到后面元素的最小值然后与之交换。

选择排序法效率中。

选择排序思路

1:外层循环:要走几http://趟,同样是length-1。

2:设置一个最小值。假设第一个就是最小值。

3:设置一个最小值下标

4:内层循环:那你当前的最小值去逐一比较。当有比当前最小值小的数时,记录最小值,记录下标。

5:退出内层循环后就交换位置。

package com.test_1;

public class Demo5_3 {

public static void main(String[] args) {

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//调用选择排序法

Select select = new Select();

select.sort(arr);

}

}

//--------------选择排序法

class Select{

public void sort(int arr[]){

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较

for(int k=j+1;k

//找到最小值

if (min>arr[k]) {

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}

}

}

最后再比较一下两个排序法之间的效率差异:

代码

package com.test_1;

import java.util.Calendar;

public class Demo5_3 {

public static void main(String[] args) {

//构建一个庞大的无序数组用于测试时间

int len=100000;

int arr1 [] = new int [len];

for(int i=0;i

//让程序随机产生一个1~10000的数

//Math.random()会产生一个0~1的数

int t = (int)(Math.random()*10000);

arr1[i] = t;

}

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//获得时间实例

Calendar cal = Calendar.getInstance();

//在排序前打印系统时间

System.out.println("冒泡排序法开始"+cal.getTime());

//调用冒泡排序法

Bubble bubble = new Bubble();

bubble.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("冒泡排序法结束"+cal.getTime());

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法开始"+cal.getTime());

//调用选择排序法

Select select = new Select();

select.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法结束"+cal.getTime());

}

}

//-----------------冒泡排序法

class Bubble{

//排序方法

public void sort(int arr[]){

int temp=0;//中间值

//-------冒泡排序法

//外层循环,它决定一共走几趟

for(int i = 0;i

//内层循环,决定每一趟循环的次数

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较

for(int k=j+1;k

//找到最小值

if (min>arr[k]) {

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}

}

}

最后再比较一下两个排序法之间的效率差异:

代码

package com.test_1;

import java.util.Calendar;

public class Demo5_3 {

public static void main(String[] args) {

//构建一个庞大的无序数组用于测试时间

int len=100000;

int arr1 [] = new int [len];

for(int i=0;i

//让程序随机产生一个1~10000的数

//Math.random()会产生一个0~1的数

int t = (int)(Math.random()*10000);

arr1[i] = t;

}

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//获得时间实例

Calendar cal = Calendar.getInstance();

//在排序前打印系统时间

System.out.println("冒泡排序法开始"+cal.getTime());

//调用冒泡排序法

Bubble bubble = new Bubble();

bubble.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("冒泡排序法结束"+cal.getTime());

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法开始"+cal.getTime());

//调用选择排序法

Select select = new Select();

select.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法结束"+cal.getTime());

}

}

//-----------------冒泡排序法

class Bubble{

//排序方法

public void sort(int arr[]){

int temp=0;//中间值

//-------冒泡排序法

//外层循环,它决定一共走几趟

for(int i = 0;i

//内层循环,决定每一趟循环的次数

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

//找到最小值

if (min>arr[k]) {

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}

}

}

最后再比较一下两个排序法之间的效率差异:

代码

package com.test_1;

import java.util.Calendar;

public class Demo5_3 {

public static void main(String[] args) {

//构建一个庞大的无序数组用于测试时间

int len=100000;

int arr1 [] = new int [len];

for(int i=0;i

//让程序随机产生一个1~10000的数

//Math.random()会产生一个0~1的数

int t = (int)(Math.random()*10000);

arr1[i] = t;

}

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//获得时间实例

Calendar cal = Calendar.getInstance();

//在排序前打印系统时间

System.out.println("冒泡排序法开始"+cal.getTime());

//调用冒泡排序法

Bubble bubble = new Bubble();

bubble.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("冒泡排序法结束"+cal.getTime());

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法开始"+cal.getTime());

//调用选择排序法

Select select = new Select();

select.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法结束"+cal.getTime());

}

}

//-----------------冒泡排序法

class Bubble{

//排序方法

public void sort(int arr[]){

int temp=0;//中间值

//-------冒泡排序法

//外层循环,它决定一共走几趟

for(int i = 0;i

//内层循环,决定每一趟循环的次数

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

System.out.print(arr[i]+" ");

}

}

}

最后再比较一下两个排序法之间的效率差异:

代码

package com.test_1;

import java.util.Calendar;

public class Demo5_3 {

public static void main(String[] args) {

//构建一个庞大的无序数组用于测试时间

int len=100000;

int arr1 [] = new int [len];

for(int i=0;i

//让程序随机产生一个1~10000的数

//Math.random()会产生一个0~1的数

int t = (int)(Math.random()*10000);

arr1[i] = t;

}

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//获得时间实例

Calendar cal = Calendar.getInstance();

//在排序前打印系统时间

System.out.println("冒泡排序法开始"+cal.getTime());

//调用冒泡排序法

Bubble bubble = new Bubble();

bubble.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("冒泡排序法结束"+cal.getTime());

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法开始"+cal.getTime());

//调用选择排序法

Select select = new Select();

select.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法结束"+cal.getTime());

}

}

//-----------------冒泡排序法

class Bubble{

//排序方法

public void sort(int arr[]){

int temp=0;//中间值

//-------冒泡排序法

//外层循环,它决定一共走几趟

for(int i = 0;i

//内层循环,决定每一趟循环的次数

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

//让程序随机产生一个1~10000的数

//Math.random()会产生一个0~1的数

int t = (int)(Math.random()*10000);

arr1[i] = t;

}

//简单测试数组

int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

//获得时间实例

Calendar cal = Calendar.getInstance();

//在排序前打印系统时间

System.out.println("冒泡排序法开始"+cal.getTime());

//调用冒泡排序法

Bubble bubble = new Bubble();

bubble.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("冒泡排序法结束"+cal.getTime());

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法开始"+cal.getTime());

//调用选择排序法

Select select = new Select();

select.sort(arr1);

//重新获得时间实例

cal = Calendar.getInstance();

System.out.println("选择排序法结束"+cal.getTime());

}

}

//-----------------冒泡排序法

class Bubble{

//排序方法

public void sort(int arr[]){

int temp=0;//中间值

//-------冒泡排序法

//外层循环,它决定一共走几趟

for(int i = 0;i

//内层循环,决定每一趟循环的次数

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

//内层循环,决定每一趟循环的次数

//如果我们发现前一个数比后一个数大,则交换

for(int j=0;j

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

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

//换位

temp = arr[j];

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

arr[j+1] = temp;

}

}

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

System.out.print(arr[i]+" ");

}*/

}

}

//--------------选择排序法

class Select

{

public void sort(int arr[])

{

//中间值

int temp = 0;

//外循环:我认为最小的数,从0~长度-1

for(int j = 0; j

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

{

//最小值:假设第一个数就是最小的

int min = arr[j];

//记录最小数的下标的

int minIndex=j;

//内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标

for(int k=j+1;k

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

{

//找到最小值

if (min>arr[k])

{

//修改最小

min=arr[k];

minIndex=k;

}

}

//当退出内层循环就找到这次的最小值

//交换位置

temp = arr[j];

arr[j]=arr[minIndex];

arr[minIndex]=temp;

}

/*//输出结果

for(int i = 0;i

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:

System.out.print(arr[i]+" ");

}*/

}

}

运行结果:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java注解的Retention和RetentionPolicy实例分析
下一篇:包含http的api测试工具的词条
相关文章

 发表评论

暂时没有评论,来抢沙发吧~