冒泡排序之java实现

来源:互联网 发布:sharp扫描软件 编辑:程序博客网 时间:2024/06/07 08:11

(建议在学习排序算法的同时,顺便练习对数组数据的输入:本博客中冒泡排序、优化版、选择排序(给定数组数据)插入排序、希尔排序(键盘输入数据)。快速排序(电脑自动以随机数的形式输入数据)


冒泡排序:重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

过程:
1、比较相邻的元素,将小的放前面,大的放后面。
2、从前往后依,次对每一对相邻元素作同样的操作。这样最后一个元素将会是最大值。
3、针对无序区间所有的元素重复以上的步骤。
4、重复步骤的元素依次减少,直到排列完毕。

特点:

1、需比较(n-1)(n-2)+...+3+2+1=n(n-1)/2次,时间复杂度为O(n^2);如果本身就已排序完成的数据,只需比较n-1次即可,时间复杂度为O(n)。

2、冒泡排序是对相邻两元素进行比较交换,所以并不会改变相等元素的顺序,故是稳定排序法。

3、只需一个额外空间,所以空间复杂度为O(1)。

4、适用于数据量小或有部分数据已经过排序的情况。


核心代码:

    public void bubble() {          //最多进行length-1次排序          for(int i = arr.length-1; i > 0; i--) {              //对当前无序区间进行排序              for(int j = 0; j < i; j++) {                  //比较相邻的两个数,不符合排序顺序则交换                  if(arr[j] > arr[j+1]) {                      int temp = arr[j];                      arr[j] = arr[j+1];                      arr[j+1] = temp;                  }              }              System.out.print("第"+(arr.length-i)+"次排序后的结果:");              //打印每次排序结果              showdata();          }      }  

可对核心代码进行优化,以便提高运行效率,详见:http://blog.csdn.net/qq_35383263/article/details/60469758

完整代码:

public class BubbleSort{int arr[] = {5,8,1,3,9,7};public static void main(String args[]) {BubbleSort bst = new BubbleSort();System.out.print("原数组为:");//遍历原始数组bst.showdata();//对数组进行排序bst.bubble();System.out.print("完成排序后的数组:");//显示最终结果bst.showdata();}public void showdata() {for(int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}System.out.println();}public void bubble() {//最多进行length-1次排序for(int i = arr.length-1; i > 0; i--) {//对当前无序区间进行排序for(int j = 0; j < i; j++) {//比较相邻的两个数,不符合排序顺序则交换if(arr[j] > arr[j+1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}System.out.print("第"+(arr.length-i)+"次排序后的结果:");//打印每次排序结果showdata();}}}


程序执行结果:

原数组为:5 8 1 3 9 7 
第1次排序后的结果:5 1 3 8 7 9 
第2次排序后的结果:1 3 5 7 8 9 
第3次排序后的结果:1 3 5 7 8 9 
第4次排序后的结果:1 3 5 7 8 9 
第5次排序后的结果:1 3 5 7 8 9 
完成排序后的数组:1 3 5 7 8 9 


转载请标明出处,原文地址:http://blog.csdn.net/qq_35383263/article/details/60469679

0 0