java语言实现冒泡排序
冒泡排序算法的基本思想是:
假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]),则交换它们,直到序列比较完。我们称它为一趟冒泡,结果是将最小的元素交换到待排序的第一位置(关键字最小的元素如气泡一般逐渐往上“漂浮”直至“水面”,这就是冒泡排序名字的由来)。
下一趟冒泡时,前一趟确定的最小元素不再参与比较,待排序列减少一个元素,每趟冒泡的结果是把序列中的最小元素放到了序列的最终位置······这样最多做n-1趟冒泡就能把所有元素排好序。
我的理解是:每趟排序都将本趟排序中的元素们通过相邻之间元素比较,使较小的元素向前传递,排序的趟数和数组的长度有关,每排一趟序,就能确定一个元素的位置(就是把要排序的元素最小的位置确定出来放到已确定序列的下一个位置,已确定序列不是凭空出现的,而是一趟趟排序的结果),下趟排序元素就少一个,直到最后一趟排序,要排序的元素只有两个。
算法代码如下(java语言实现,从后向前)
public class BubbleSort{
public static void main(String[] args){
int arr[] = {2,568,4445,22,895,355};//随机写一个int 数组
bubbleSort(arr);//调用冒泡排序函数
printArray(arr);//遍历打印数组元素
}
/*
冒泡排序函数
*/
public static void bubbleSort(int arr[]){
for(int i = 0 ; i < arr.length-1;i++){
boolean flag = false;//表示本趟冒泡是否发生交换的标志
for(int j = arr.length-1;j>i;j--){//一趟冒泡过程,从后向前,将小的元素向前移动直至不能向前
if(arr[j-1]>arr[j]){//若为逆序,则将其交换
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
flag = true;//表明本趟冒泡发生交换
}
}
if(flag == false)//本趟遍历后没有发生交换,说明已经有序
return;
}
}
/*
一个遍历打印数组方法
*/
public static void printArray(int[] arr){
//输出一半中括号,不要换行打印
System.out.print("[");
//数组进行
for(int i = 0;i < arr.length;i++){
//判断遍历到的元素,是不是数组的最后一个元素
//如何判断 循环变量 到达length-1
if (i==arr.length-1){
//输出数组最后一个元素和]
System.out.print(arr[i]+"]");
}else {
//不是数组的最后一个元素,输出数组元素和逗号
System.out.print(arr[i]+",");
}
}
System.out.println();//重复使用时可以使两个数组处于不同的行
}
}
输出结果为:
输出结果正确。
网友评论