冒泡排序算法
冒泡排序算法
冒泡排序,是一种简单的排序算法,由于在排序过程中总是小的数往前放,大的数往后放,因为它类似于泡泡冒出的方式,所以起名冒泡排序。它的算法过程其实就是重复访问过要排序的数组元素,一次比较两个元素,如果他们的顺序错误就把他们的位置彼此交换。
通俗来讲就是相邻的两个数,将小数放在前面,大数放在后面。第一次:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小的数放前面,大的数放后面,如此继续,直至比较最后两个数,将小数放前,大数放后。如下图所示。

在使用冒泡排序时一定要注意这一点,在冒泡排序的过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否已经完成排序;为了解决这一不足,需要我们自己设置判断。
我们可设置一个标志位flag,将其初始值设置为true,表示被排序的表是一个无序的表,每一次排序开始前设置flag值为true,在进行数据交换时,修改flag为true。在新一轮排序开始时,检查此标志,若此标志为false,表示上一次没有做过交换数据,则结束排序;否则进行排序;
冒泡排序关键在于位置交换
temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
比较大小
if(values[j]>values[j+1]){
temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
}
判断是否已经完成排序
boolean flag = true;
flag = false;
如果想要知道在哪结束的判断可以在打印输出的后添加标记
if(flag){
System.out.println("结束!!!");
break;
}
源代码:
public static void main(String[] args) {
int[] values = { 3, 1, 6, 2, 9, 0, 7, 4, 5, 8 };
int temp = 0 ;
for(int i=0;i<values.length-1;i++){
boolean flag = true;
for(int j=0; j<values.length-1-i; j++){
//比较大小,换顺序
if(values[j]>values[j+1]){
temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
flag = false;
}
}
if(flag){
System.out.println("结束!!!");
break;
}
}
}
}

浙公网安备 33010602011771号