冒泡排序

冒泡排序算法的原理如下:

1:比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2:对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

3:针对所有的元素重复以上的步骤,除了最后一个。

4:持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

实现方法:

用二重循环实现,外循环变量设为i,内循环变量设为j。假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,n-1,对于每一个i,j的值依次为0,1,2,...n-i 。

设数组长度为N:
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

 代码:

package com.hry.bubble_sort;

import java.util.Arrays;
public class BubbleSort {

/**
* 定义一个静态的方法方便在主函数中调用
*/
public static void FirstSort(int arr[]) {
int length = arr.length - 1;
for (int j = 0; j < length; j++) {
// 因为通过之前发现五个数重复执行了四次,所以定义一个整形来控制for循环的次数
// 由于之前的代码存在问题,其解决办法就是在比较次数上做手脚。
for (int i = 0; i < arr.length - 1 - j; i++) {
// 输出一句库进行提示
System.out.print("第" + (j + 1) + "趟,第 " + (i + 1) + " 次排序");
// 循环判断找出最大值,就算不学冒泡排序,我们在学习比较大小的时候也应该会了
if (arr[i] < arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
// 输出排序号之后的结果
System.out.println(Arrays.toString(arr));
}
}
}


public static void FinalSort(int arr[]) {
int length = arr.length - 1;
boolean bool = true;
for (int j = 0; j < length; j++) {
// 因为通过之前发现五个数重复执行了四次,所以定义一个整形来控制for循环的次数
// 由于之前的代码存在问题,其解决办法就是在比较次数上做手脚。
for (int i = 0; i < arr.length - 1 - j; i++) {
// 输出一句库进行提示
System.out.print("第" + (j + 1) + "趟,第 " + (i + 1) + " 次排序");
// 循环判断找出最大值,就算不学冒泡排序,我们在学习比较大小的时候也应该会了
if (arr[i] < arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
bool = false;
}
// 输出排序号之后的结果
System.out.println(Arrays.toString(arr));
}
if (bool) {
break;
}
}
}

// 主函数
public static void main(String [] args) {
int arr[] = {7, 4, 2, 1};
FirstSort(arr);
System.out.println("==============分割线==============");
arr = new int[]{7, 4, 2, 1};
FinalSort(arr);
}
}

 

 

 

posted @ 2021-03-17 20:11  magechaorua  阅读(67)  评论(0)    收藏  举报