java之冒泡排序(Bubble sort)

主要内容是摘自别人的,但是发现示例代码有错,故内容复制,代码修改。

原理:临近的数字两两进行比较,按照从小到大(从大到小)进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位;

   然后再从头开始进行两两比较交换,直到倒数第二位时结束(因为由第一遍排序得知已经把最大(小)数排到末尾了);

   接着再从头开始进行两两比较交换,直到倒数第三位时结束(因为由第一遍排序得知已经把最大(小)数排到末尾了,第二遍把第二大(小)的数排到倒数第二位了);

   循环直到排完序。

   例子为从小到大排序,

   原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |

第一趟排序(外循环)

  第一次两两比较6 > 2交换(内循环)

   交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |

   交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |

  第二次两两比较,6 > 4交换

   交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |

   交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |

  第三次两两比较,6 > 1交换

   交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |

   交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |

  第四次两两比较,6 > 5交换

   交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |

   交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

  第五次两两比较,6 < 9不交换

   交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

   交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

第二趟排序(外循环)

  第一次两两比较2 < 4不交换

   交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |(已经知道最大)

   交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

  第二次两两比较,4 > 1交换

   交换前状态| 2 | 4 | 1 | 5 | 6 | 9 | 
   交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

   第三次两两比较,4 < 5不交换

   交换前状态| 2 | 1 | 4 | 5 | 6 | 9 | 
   交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

   第四次两两比较,5 < 6不交换

   交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |

   交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

 第三趟排序(外循环)

  第一次两两比较2 > 1交换

   交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |

   交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

  第二次两两比较,2 < 4不交换

   交换前状态| 1 | 2 | 4 | 5 | 6 | 9 | 
   交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

  第三次两两比较,4 < 5不交换

   交换前状态| 1 | 2 | 4 | 5 | 6 | 9 | 
   交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

第四趟排序(外循环)无交换

   第一次两两比较1<2不交换   

   交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

   第一次两两比较2<4不交换   

   交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

第五趟排序(外循环)无交换

  第一次两两比较1<2不交换   

   交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

原:| 1 | 2 | 4 | 5 | 6 | 9 |

一:| 1 | 2 | 4 | 5 | 6 | 9 |

二:| 1 | 2 | 4 | 5 | 6 | 9 |

三:| 1 | 2 | 4 | 5 | 6 | 9 |

四:| 1 | 2 | 4 | 5 | 6 | 9 |

五:| 1 | 2 | 4 | 5 | 6 | 9 |

排序完毕,输出最终结果1 2 4 5 6 9

 1 /*
 2 By starainDou
 3 */
 4 public class Hello {
 5     public static void main(String args[]){ 6 int []num = {6,2,4,1,5,9}; 7 for(int i = 0;i<num.length - 1;i++){ 8 for(int j = 0; j<num.length-1-i;j++){ 9 if(num[j]>num[j+1]){ 10 int temp = num[j]; 11 num[j] = num[j+1]; 12 num[j+1] = temp; 13  } 14  } 15  } 16 for(int n = 0; n < num.length; n ++){ 17 System.out.print(num[n]+"\t"); 18  } 19  } 20 }

在此感谢原作者

By 豆电雨

你可能感兴趣的:(Bubble)