#Java中基础排序算法之冒泡排序#
1.排序概念理解
将一组杂乱无章的数据按一定的规律顺次排列起来。数据表( data list): 它是待排序数据对象的有限集合。排序码(key):通常数据对象有多个属性域,即多个数据成员组成,其中有一个属性域可用来区分对象,作为排序依据。该域即为排序码。每个数据表用哪个属性域作为排序码,要视具体的应用需要而定。
2.冒泡排序原理
比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
我们可以把冒泡排序看成生活中冒气泡的方式,从下往上冒,依次把最大或最小的值冒到最顶层。例如:一个整型数组int[] i = {3,2,4,5,1};其排序后的结果,如图:
深入分析冒泡排序过程,如下图所示,
冒泡排序逻辑思维:
1)利用for嵌套循环实现循环判断并排序,外层循环控制循环次数,如果数组长度(length)为5,最多就比较4轮,所以数组的索引从0开始,要循环4次,故应该是长度-1;
2)内层for循环,并结合if条件选择,控制每一轮中的元素下标(索引)位置,每结束一轮,就会判断出当前最大值,为了减少判断,故在长度-1同时还要再减控制循环次数,直到最后一次循环判断,冒泡顺序就整理结束,终止循环.
3.冒泡排序代码实现
例如:一个整型数组int[] i = {3,2,4,5,1},代码实现冒泡排序,并输出打印结果为[1,2,3,4,5].
public class BubbleSortTest{
public static void main(String[] args){
int[] arr={13,58,8,15,22,1};
arr=bubbleSort(arr);
BeautifulPrint.print(arr);
}
static int[] bubbleSort(int[] arr){
//一共要执行4次冒泡 数组长度为5 冒泡的次数 length-1
for(int j=0;j<arr.length-1;j++){
//第一次冒泡 -j是为了少判断
for(int i=0;i<arr.length-1-j;i++){
if(arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
return arr;
}
}
public class BeautifulPrint {
public static void main(String[] args){
int[] arr={1,3,6,4,2,5};
print(arr);//希望的打印格式[1,2,3,4,5]
}
static void print(int[] arr){
System.out.print("[");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]);
//判断遍历是不是最后一位
if(i!=arr.length-1){
System.out.print(",");
}
}
System.out.print("]");
}
}