闲来无事,自己想起上家公司的笔试题就会考冒泡排序,so,自己就试试写了下,分享下了。
实现:
1 package myTempTest; 2 3 public class maopao { 4 5 public static void main(String[] args) { 6 7 //定义一个无序的数字型数字 8 int[] numList = {5,4,3,2,1,10,9,8,7,6,21,32,1,322,12321,33,2111,22,22,123,2131}; 9 10 //最外面的循环用于从数组的第一值依次和后面的值做比较,一直循环到数组的最后一个数字 11 for (int i = 0 ; i < numList.length ; i ++) 12 { 13 System.out.print("第"+i+"次循环:");//换行 14 //内循环 用于判断数组的第 i 个位置的数字 和 起后面的第j个数字的大小比较和位置交换用的。 15 for(int j = numList.length-1 ; j > i ; j -- ) 16 { 17 if(numList[j]<numList[i]) 18 { 19 int temp = numList[i]; 20 numList[i] = numList[j]; 21 numList[j] = temp; 22 23 } 24 } 25 for(int k = 0 ; k < numList.length ; k ++) 26 { 27 System.out.print(numList[k] + " ");//输出本次循环之后的排序 28 } 29 System.out.println(); 30 } 31 } 32 33 }
输出结果:
1 第0次循环:1 4 3 2 1 10 9 8 7 6 21 32 5 322 12321 33 2111 22 22 123 2131 2 第1次循环:1 1 3 2 4 10 9 8 7 6 21 32 5 322 12321 33 2111 22 22 123 2131 3 第2次循环:1 1 2 3 4 10 9 8 7 6 21 32 5 322 12321 33 2111 22 22 123 2131 4 第3次循环:1 1 2 3 4 10 9 8 7 6 21 32 5 322 12321 33 2111 22 22 123 2131 5 第4次循环:1 1 2 3 4 10 9 8 7 6 21 32 5 322 12321 33 2111 22 22 123 2131 6 第5次循环:1 1 2 3 4 5 9 8 7 6 21 32 10 322 12321 33 2111 22 22 123 2131 7 第6次循环:1 1 2 3 4 5 6 8 7 9 21 32 10 322 12321 33 2111 22 22 123 2131 8 第7次循环:1 1 2 3 4 5 6 7 8 9 21 32 10 322 12321 33 2111 22 22 123 2131 9 第8次循环:1 1 2 3 4 5 6 7 8 9 21 32 10 322 12321 33 2111 22 22 123 2131 10 第9次循环:1 1 2 3 4 5 6 7 8 9 21 32 10 322 12321 33 2111 22 22 123 2131 11 第10次循环:1 1 2 3 4 5 6 7 8 9 10 32 21 322 12321 33 2111 22 22 123 2131 12 第11次循环:1 1 2 3 4 5 6 7 8 9 10 21 22 322 12321 33 2111 22 32 123 2131 13 第12次循环:1 1 2 3 4 5 6 7 8 9 10 21 22 322 12321 33 2111 22 32 123 2131 14 第13次循环:1 1 2 3 4 5 6 7 8 9 10 21 22 22 12321 33 2111 32 123 322 2131 15 第14次循环:1 1 2 3 4 5 6 7 8 9 10 21 22 22 32 33 2111 123 322 2131 12321 16 第15次循环:1 1 2 3 4 5 6 7 8 9 10 21 22 22 32 33 2111 123 322 2131 12321 17 第16次循环:1 1 2 3 4 5 6 7 8 9 10 21 22 22 32 33 123 322 2111 2131 12321 18 第17次循环:1 1 2 3 4 5 6 7 8 9 10 21 22 22 32 33 123 322 2111 2131 12321 19 第18次循环:1 1 2 3 4 5 6 7 8 9 10 21 22 22 32 33 123 322 2111 2131 12321 20 第19次循环:1 1 2 3 4 5 6 7 8 9 10 21 22 22 32 33 123 322 2111 2131 12321 21 第20次循环:1 1 2 3 4 5 6 7 8 9 10 21 22 22 32 33 123 322 2111 2131 12321
原理:
冒泡排序原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子。
或者可以这样描述冒泡排序:就是将第一个记录的关键字和第二个记录的关键字进行比较, 如果后面的比前面的小则交换,然后比较第二个和第三个,依次类推。比完一趟,最大的那个已经放到了最后的位置,这样就可以对前面N-1个数再循环比较。
稳定,时间复杂度 O(n^2)
图解: