冒泡排序算法原理
1、从后往前依次比较相邻的元素。若是要按照升序排序,则后面的元素比前面的小,就交换这2个元素;降序则相反。
2、对每一对相邻元素作同样的工作,从第一对到最后一对。进行一轮比较交换下来,最后的元素就会是最小(或最大)的数了,这个数就不用参与后面的比较操作了。
3、针对所有的元素重复以上的步骤。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
为了尽量缩短待排序表的长度,避免下一次扫描中可能出现的不必要的比较,在每次扫描过程中,一方面要记录进行元素交换的次数,另一方面要记住在本次扫描中的最后一次进行交换的位置。在这个位置以后没有发生过交换,则说明在这个位置以后的元素实际上已经排好次序。
总的来说,冒泡法基本思想是重复的进行整个数组的排序,一次比较两个元素(两两排序),如果它们顺序不符合就交换,重复这样直到数列没有再需要交换的数为止(结束条件)。因为它就好像气泡一样,轻的气泡会往上漂浮,在不断漂浮的过程中,发生了两两交换过程,所以叫冒泡排序。
public class Test29 { public static void main(String[] args) { int[] arr={1,4,5,7,8,2}; func(arr); printArr(arr); } //打印 private static void printArr(int[] arr) { System.out.print("[ "); for (int i = 0; i < arr.length; i++) { if(i==arr.length-1){ System.out.print(arr[i]+" "); }else{ System.out.print(arr[i]+", "); } } System.out.print("]"); } private static void func(int[] arr) { for (int i = 0; i <arr.length ; i++) { boolean flag=false; for (int j = 0; j < arr.length-1-i; j++) { if(arr[j]>arr[j+1]){ int tmp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp; flag=true; } } //若flag=false,表示此时没有交换位置,已实现冒泡排序 if(flag==false){ break; } } } }