冒泡排序java

一、最简单粗暴的排序

思想为:让每一个关键字都和它后边的每一个关键字比较,

如果大则交换,这样第一个位置的关键字在一次循环后一定变为最小值。

 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 }

 

原文地址:https://www.cnblogs.com/XuGuobao/p/7345155.html