一、最简单粗暴的排序
思想为:让每一个关键字都和它后边的每一个关键字比较,
如果大则交换,这样第一个位置的关键字在一次循环后一定变为最小值。
1 package demo01; 2 3 class BubbleSort01 { 4 public static void main(String[] args) { 5 int[] n = {0,5,2,6,9,3,4,8,1,10,82,100,52,35,46,7}; 6 int i,j; 7 for(int x=1;x<n.length;x++){ 8 System.out.print(n[x] + "、"); 9 } 10 System.out.println(""); 11 12 for(i=1;i<n.length;i++){ 13 for(j=i+1;j<n.length;j++){ 14 if(n[i]>n[j]){ 15 int temp = n[i]; 16 n[i] = n[j]; 17 n[j] = temp; 18 } 19 } 20 } 21 22 for(int x=1;x<n.length;x++) 23 System.out.print(n[x]+ "、"); 24 } 25 }
二、正宗的冒泡排序
思想:
当外循环为1(循环变量i=1),内循环(变量j)由大到小,两两比较,
将较小值换到前面,之道最小值放到最前面;开始下一次循环(i=2),一次类推…………
1 package demo01; 2 3 class BubbleSort02 { 4 public static void main(String[] args) { 5 int[] n = {0,5,2,6,9,3,4,8,1}; 6 int i,j; 7 for(int x=1;x<n.length;x++){ 8 System.out.print(n[x] + "、"); 9 } 10 System.out.println(""); 11 12 for(i=1;i<n.length;i++){ 13 for(j=n.length-1;j>=2;j--){ 14 if(n[j]<n[j-1]){ 15 int temp = n[j]; 16 n[j] = n[j-1]; 17 n[j-1] = temp; 18 } 19 } 20 } 21 22 for(int x=1;x<n.length;x++) 23 System.out.print(n[x]+ "、"); 24 } 25 }
三、优化的冒泡排序算法
思想:在上述算法二的基础上,对交换数据的步骤进行标记,即,如果发生了数据交换,标记的值就会变化。
当某次外循环进行时,标记位的值始终不变,说明此次循环没有发生值的交换,即说明已经排序完成。
1 package demo01; 2 3 class BubbleSort03 { 4 5 public static void main(String[] args) { 6 int[] n = {0,5,2,6,9,3,4,7,8,1}; 7 8 for(int x=1;x<n.length;x++){ 9 System.out.print(n[x] + "、"); 10 } 11 System.out.println(""); 12 13 int i,j; 14 boolean flag = true; //flag作为标记 15 for(i=1;i<n.length && flag;i++){ 16 flag = false; //初始化flag 17 for(j=n.length-1;j>=2;j--){ 18 if(n[j]<n[j-1]){ 19 int temp = n[j]; 20 n[j] = n[j-1]; 21 n[j-1] = temp; 22 flag = true; 23 } 24 } 25 } 26 27 for(int x=1;x<n.length;x++) 28 System.out.print(n[x]+ "、"); 29 } 30 }