冒泡排序的Java实现

来源:互联网 发布:大学生网络兼职论坛 编辑:程序博客网 时间:2024/05/16 07:28
package com.atguigu.me.algorithm.sort;


public class BubblingSort {


public static void main(String[] arrrgs) {
int[] ints = new int[] { 1, 3, 5, 2, 0, 9 };
ints = BubblingSort(ints);
for (int i = 0; i < ints.length; i++) {
System.out.print(ints[i] + "-->");// 0-->1-->2-->3-->5-->9-->
}
}


public static int[] BubblingSort(int[] arr) {


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


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


if (arr[i] > arr[j]) {


int temp = arr[i];


arr[i] = arr[j];


arr[j] = temp;


}


}


}
return arr;
}


// 假设有这样一个数组为 int []list=new list[]{1,2,3,4}; 我们要对其进行升序排序(很显然
// 这里已经是符合要求的升序排列).
// 现在 假若我们用冒泡排序 大概流程会是这样:
// 1.先将1,2进行比较 无须替换 然后2,3比较 无须替换 然后3,4比较 无须替换 完成第一轮冒泡 比较次数为3次
// 2.将2,3进行比较 无须替换 然后3,4进行比较 无须替换 完成第二轮冒泡 比较次数为2次
// 3.将3,4进行比较 无须替换 完成第三轮冒泡 比较次数为1次
// 很显然 我们没有移动一次数字 但是却比较了6次


// 再来看看插入排序如何实现 其详细步骤为:
// 1.先设定1为有序区间 将2和1比较 无须移动 比较一次
// 2.此时1,2均为有序区间 将3和2进行比较 无须移动 直接跳出while循环 比较一次
// 3.此时1,2,3均为有序区间 将4和3进行比较 无须移动 直接跳出while循环 比较一次
// 很显然 我们也没有移动数字 但是只比较了3次
// 总的来说 冒泡排序 循环一次 就确定了第0位为最小值(针对升序) 而插入排序 循环一次 则将有序区间增加一位
// 因此 针对部分有序的集合来说(这里说的有序 是指与我们想得到的顺序一致) 插入排序效率优于冒泡排序
// 但是我们可以针对冒泡排序进行优化 当我们循环某一次 发现没有任何数字移动的时候 我们就已经知道 集合已经排序完成 而无须再进行循环
}
原创粉丝点击