数据结构八大排序算法之冒泡排序(Java实现)

本人是软工大二学生一枚,这学期开了数据结构这门课,学了一些算法,我觉得这八大算法挺有用的,所以总结一下发出来,有不对的地方欢迎各位指导!

  • 基本思想:冒泡排序(Bubble Sort)的原理挺简单的,你可以把需要排序的数据想象成大小不同的泡泡,不同大小的泡泡的上升速度不一样,大的泡泡会更快的上升,到最后从下往上的泡泡依次是从小到大的泡泡,这样就类似于对泡泡的排序。
  • 原理:在一个数组中,从第一个元素开始循环比较,第一个元素与第二个元素相比较,例如是按升序排列,如果第一个元素大于第二个元素,则交换两个元素,然后比较第二个和第三个元素,在接下来是第三个和第四个······直到所有元素比较完,这样一来就完成了对数组的升序排列。

下面举个具体的例子,输出每一趟排序后的结果。 

        int []  x = {1,5,8,7,6,9,12,4,165,85,145};        //定义初始数组 

第一趟排序完成: [1, 5, 7, 6, 8, 9, 4, 12, 85, 145, 165]
第二趟排序完成:[1, 5, 6, 7, 8, 4, 9, 12, 85, 145, 165]
第三趟排序完成:[1, 5, 6, 7, 4, 8, 9, 12, 85, 145, 165]
第四趟排序完成:[1, 5, 6, 4, 7, 8, 9, 12, 85, 145, 165]
第五趟排序完成:[1, 5, 4, 6, 7, 8, 9, 12, 85, 145, 165]
第六趟排序完成:[1, 4, 5, 6, 7, 8, 9, 12, 85, 145, 165]

到这里九排序完成了,后面还有几次输出就不列出来了

  • 算法分析: 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数  和记录移动次数  均达到最小值:  ,  所以,冒泡排序最好的时间复杂度为  。若初始文件是反序的,需要进行  趟排序。每趟排序要进行  次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: 

         

冒泡排序的最坏时间复杂度为   。

综上,因此冒泡排序总的平均时间复杂度为   。

  • 算法稳定性:冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。  

 下面就是我的代码,因为第一次发,所以有些写的不好的地方请各位见谅,如果代码或文章有哪些地方错了的话,欢迎指出来,谢谢大家。

import java.util.Arrays;


public class Bubble_Sort {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] x = { 1, 5, 8, 7, 6, 9, 12, 4, 165, 85, 145 }; // 定义初始数组
		bubbleSort(x);
	}

	public static void bubbleSort(int[] arr) {
		for (int i = 0; i < arr.length - 1; i++) { // 每一趟排序完成之后就将大的元素排到最后
			for (int j = 0; j < arr.length - 1 - i; j++) { 
				if (arr[j] > arr[j + 1]) {
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}

			}
			System.out.println(Arrays.toString(arr)); // 输出每一趟排序后的结果
		}
	}
}

猜你喜欢

转载自blog.csdn.net/c_learner_/article/details/86648126