计理02组06号十大经典排序算法上篇

Posted SYF

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计理02组06号十大经典排序算法上篇相关的知识,希望对你有一定的参考价值。

冒泡排序

冒泡排序(Bubble Sort)是基于交换的排序,每次遍历需要排序的元素,依次比较相邻的两个元素的大小,如果前一个元素大于后一个元素则两者交换,保证最后一个数字一定是最大的(假设按照从小到大排序),即最后一个元素已经排好序,下一轮只需要保证前面 n-1 个元素的顺序即可。

之所以称为冒泡,是因为最大/最小的数,每一次都往后面冒,就像是水里面的气泡一样。

排序(假设从小到大)的步骤如下:

  1. 从头开始,比较相邻的两个数,如果第一个数比第二个数大,那么就交换它们位置。
  2. 从开始到最后一对比较完成,一轮结束后,最后一个元素的位置已经确定。
  3. 除了最后一个元素以外,前面的所有未排好序的元素重复前面两个步骤。
  4. 重复前面 1 ~ 3 步骤,直到所有元素都已经排好序。

例如,我们需要对数组 [98,90,34,56,21] 进行从小到大排序,每一次都需要将数组最大的移动到数组尾部。

交换具体逻辑如下图所示:

接下来两轮排序确定好了第二个和第三个的位置,其实这个数组已经完成排序了,一共 5 个数,冒泡 4 次即可。

紫色表示已经排好的元素,橙红色表示正在比较/交换的元素,可以看出前面两次排序之后,已经确定好了最大两个数的位置。

java代码

查看代码
public class BubbleSort 
	public static void bubbleSort(int[] nums) 
		int size=nums.length;
		for(int i=0;i<size-1;i++) 
			System.out.println("第"+(i+1)+"轮交换开始");
			for(int j=0;j<size-1-i;j++) 
				if(nums[j]>nums[j+1]) 
					int temp=nums[j+1];
					nums[j+1]=nums[j];
					nums[j]=temp;
				
			printf(nums);
			
		
		
	
	public static void printf(int[] nums) 
	    for (int num : nums) 
	        System.out.print(num + " ");
	    
	    System.out.println("");
	
	public static void main(String[] args) 
		// TODO Auto-generated method stub
		int[]nums = new int[]98,90,34,56,21;
	    printf(nums);
	    bubbleSort(nums);
	    
	

 

测试结果

选择排序

插入排序

希尔排序

快速排序

排序稳定性的分析

时间复杂度和空间复杂度

在黑夜里梦想着光,心中覆盖悲伤,在悲伤里忍受孤独,空守一丝温暖。 我的泪水是无底深海,对你的爱已无言,相信无尽的力量,那是真爱永在。 我的信仰是无底深海,澎湃着心中火焰,燃烧无尽的力量,那是忠诚永在

以上是关于计理02组06号十大经典排序算法上篇的主要内容,如果未能解决你的问题,请参考以下文章

计理02组01号选择排序

计理02组08号字符串操作算法

计理02组04号顺序查找

买什么数据结构与算法,这里有:动态图解十大经典排序算法(含JAVA代码实现)

十大经典排序算法

动画详解十大经典排序算法Java版实现(下)