冒泡排序算法

                                              冒泡排序算法

冒泡排序,是一种简单的排序算法,由于在排序过程中总是小的数往前放,大的数往后放,因为它类似于泡泡冒出的方式,所以起名冒泡排序。它的算法过程其实就是重复访问过要排序的数组元素,一次比较两个元素,如果他们的顺序错误就把他们的位置彼此交换。

通俗来讲就是相邻的两个数,将小数放在前面,大数放在后面。第一次:首先比较第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;
			 }		 
		 }	
	}
}

 

posted @ 2019-03-31 17:09  小沐CA  阅读(260)  评论(0)    收藏  举报