冒泡排序与选择排序的简单介绍与比较

本文深入探讨冒泡排序和选择排序两种基本排序算法。详细解释了每种算法的工作原理,包括它们的实现代码和步骤。同时,对比了这两种算法的优缺点,如冒泡排序的稳定性与选择排序的效率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序
public static void sortCompare(){
		int[] arr = {3,4,1,5,2};
		/*
		 * 要遍历的次数 
		 * 第一轮:43521比四次
		 * 第二轮:45321比三次
		 * 第三轮:45321比两次
		 * 第四轮:54321比一次
		 */
        for (int i = 0; i < arr.length-1; i++) {
           //依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
        	for (int j = 0; j < arr.length-1-i; j++) {
          // 比较相邻的元素,如果前面的数小于后面的数,就交换
        		if(arr[j]<arr[j+1]) {
		             int temp = arr[j+1];
		             arr[j+1] = arr[j];
		             arr[j] = temp;
        		}
		    }
		}
        for(int count:arr) {
        	System.out.println(count);
        }
	}
    
选择排序
public static void select() {
		int[] arr = {1,5,5,3,4,9};//待排序的数列
		/*
		 *根据下标去找,每次找出最大或最小得一个
		 * 1,5,3,4,5,9
		 * 1,3,5,4,5,9
		 * 1,3,4,5,5,9
		 * ...
		 * 1,3,4,5,5,9
		 */
		//定义一个变量用于接受最小值的下标
		int minIndex = 0;
		for(int i = 0;i<arr.length;i++) {
			minIndex=i;
			for(int x = i+1;x<arr.length;x++) {
				if(arr[minIndex]>arr[x]) {
					minIndex = x;
				}
			}
			//判断得到的最小值下表是不是它本身,是的话就不需要调换位置,否则
			if(minIndex!=i) {
				arr[minIndex]=arr[minIndex]+arr[i];
				//8 3 5
				arr[i]=arr[minIndex]-arr[i];
				//arr[i]=8-5=3
				arr[minIndex]=arr[minIndex]-arr[i];
				//arr[minIndex]=5
			}
		}
		for(int count: arr) {
			System.out.println(count);
		}
	}
冒泡,选择排序的对比
冒泡排序选择排序
比较相邻位置的两个数按顺序比较,找最大值或者最小值
每一轮比较后,位置不对都需要换位置每一轮比较都只需要换一次位置
通过数去找位置给定位置去找数

冒泡排序优缺点:优点:比较简单,空间复杂度较低,是稳定的;
缺点:时间复杂度太高,效率慢;

选择排序优缺点:优点:一轮比较只需要换一次位置;

​ 缺点:效率慢,不稳定

不稳定性

算法的稳定性定义为,对于待排序列中相同项的原来次序不能被算法改变则称该算法稳定.

如当前的数组1,(5),【5】,3,4,9

当我们利用直接选择排序算法进行排序时候,(5)和后面的【5】调换,(5)就跑到了【5】的后面了,原来的次序改变了,这样就不稳定了.而冒泡排序就不会这样,(5)和后面的【5】比较时,就会进行下一步排序动作,两个的位置是不会改变的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值