原理分析
排序结果:
详细代码实现:
package july.star.bubble;
/**
* 冒泡排序
* 相邻元素两两比较,大的往后放,第一次完毕后,最大值就出现在
* 最大索引处,同理,继续,即可得到一个排序好的数组
*
* 规律:
* 1、两两比较,大的往后放。
* 2、第一次比较完毕后,下一次比较的时候就会减少一个元素的比较
* 3、第一次比较,有0个元素不比
* 第二次比较,有1个元素不比
* 第三次比较,有2个元素不比
* 第四次比较,有3个元素不比
* .....
* 4、总共需要比较数组的长度-1次
* @author MoXingJian
* @email 939697374@qq.com
* @date 2016年12月24日 下午3:44:30
* @version 1.0
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {21,69,90,55,12};
//输出数组
printArr(arr);
//详细排序过程
detailSort(arr);
int[] arr2 = {23,59,34,88,2,99,68};
//最终版
endSort(arr2);
}
private static void endSort(int[] arr2) {
System.out.println();
System.out.println("原序列");
printArr(arr2);
//两次for循环解决
for(int i = 0; i < arr2.length-1; i++){
for(int j=0; j < arr2.length-1-i;j++){
if(arr2[j] > arr2[j+1]){
int temp = arr2[j];
arr2[j] = arr2[j+1];
arr2[j+1] = temp;
}
}
}
System.out.println();
System.out.println("两层循环排序");
printArr(arr2);
}
private static void detailSort(int[] arr) {
System.out.println();
System.out.println("第一次排序:");
//第一次排序
//arr.length-1 为了防止数据越界
//arr.length-1-0:为了减少比较的次数
for(int i=0; i < arr.length-1-0; i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
printArr(arr);
System.out.println();
System.out.println("第二次排序:");
//第二次排序
for(int i=0; i < arr.length-1-1; i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
printArr(arr);
System.out.println();
System.out.println("第三次排序:");
//第三次排序
for(int i=0; i < arr.length-1-2; i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
printArr(arr);
System.out.println();
System.out.println("第四次排序:");
//第四次排序
for(int i=0; i < arr.length-1-3; i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
printArr(arr);
}
//输出数组
private static void printArr(int[] arr) {
System.out.print("[");
for(int j = 0; j < arr.length; j++){
if(j != arr.length-1){
System.out.print(arr[j] + ",");
}else{
System.out.print(arr[j]);
}
}
System.out.print("]");
}
}