Java实现三种排序(冒泡排序、选择排序、插入排序)

一、冒泡排序

1、原理:

1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

3.针对所有的元素重复以上的步骤,除了最后一个。

4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
在这里插入图片描述

2、代码
public class BubbleSort{
	public static void main(String[] args){
		int scores[] = {67, 2, 75, 21, 89};
		//冒泡排序
		for (int i = 0; i < scores.length -1; i++){    //最多做n-1趟排序
			for(int j = 0 ;j < scores.length - i - 1; j++){    //保证j+1正确,不能出现下标越界
				//如果j对应的元素大于j+1元素,那么就交换两个变量的值
				if(scores[j] > scores[j + 1]){    //把大的值交换到后面
					//初始化一个临时变量
					int temp = scores[j];
					scores[j] = scores[j + 1];
					scores[j + 1] = temp;
				}
			}        
		}
		//输出最终排序结果
		System.out.print("最终排序结果:"+Arrays.toString(scores));
	}
}

二、选择排序

1、原理:

每一轮都找到当前最小元素,将其换到数组的最前面.

在这里插入图片描述

2、代码
import java.util.Arrays;

public class SelectSort{
	public static void main(String[] args){
		int arr[] = {67, 2, 75, 21, 89};
		//使用外层循环确定要交换位置的元素下标
				//每一次比较时,都是从i+1开始比较,保证下标索引越界,i的最大长度是arr.length-1
				//比较到最后一轮时,就会只剩下一个元素,就不需要进行比较。
				for(int i = 0;i<arr.length-1;i++) {
					//初始化int类型的变量min存储当前最小元素下标
					//默认i所对应 的元素就是最小的,因此min的默认值就是i
					int min = i;
					for(int j =i+1; j<arr.length;j++) {
						//开始比较min所对应元素和j所对应的值的大小
						if(arr[j]  < arr[min]) {
							//说明j所对应的元素值比min对应的元素值小
							min = j;
						}	
					}
					//经过对所有元素进行比较,此时min对应的元素最小
					//将min对应的元素与i对应的元素进行交换
					int temp = arr[i];
					arr[i] = arr[min];
					arr[min] = temp;

				}
		//输出最终排序结果
		System.out.print("最终排序结果:"+Arrays.toString(arr));
	}
}


三、插入排序

1、原理

插入排序的算法过程,模拟了扑克牌整理的过程。其想法就是,从第二个数字开始,向前进行比较,为这个数字找到一个合适的位置,然后将这个数字放在这个位置。所谓合适的位置就是找到小于这个数字的后面,就是该数字的合适位置。

从小到大的插入排序整个过程如图示:
第一轮:从第二位置的 6 开始比较,比前面 7 小,交换位置。
在这里插入图片描述
第二轮:第三位置的 9 比前一位置的 7 大,无需交换位置。
在这里插入图片描述
第三轮:第四位置的 3 比前一位置的 9 小交换位置,依次往前比较。
在这里插入图片描述
第四轮:第五位置的 1 比前一位置的 9 小,交换位置,再依次往前比较。
在这里插入图片描述

就这样依次比较到最后一个元素。

2、代码
import java.util.Arrays;

public class InsertSort{
	public static void main(String[] args){
		int arr[] = {67, 2, 75, 21, 89};
		//使用外层循环作为待插入牌的下标
		//默认第一个数字是已经排好序的,第二个数字开始
		for(int i =1 ;i <arr.length;i++) {
			//此时需要将i所对应的数字开始和前面的进行比较
			//由于要往前进行交换,那么使用临时变量记录此时i对应的元素值
			int temp = arr[i];
			//从i开始,向前进行比较,找到某个数字小于i对应的数字
			//那么这个数字的后面就是存放i的元素值
			int j = i;
			while(j>0 && arr[j-1]>temp) {
				//从i的位置开始,向前进行比较,如果说前面的数字大于i所对应的数字,
				//那么此时i的位置就存储前面这个元素的值
				arr[j] = arr[j-1];
				j--;
			}
			//j-- =  0时,当循环结束时,就是下标索引到0,结束循环
			arr[j] = temp;
			//输出最终排序结果
			System.out.print("最终排序结果:"+Arrays.toString(arr));
		}
	}
}
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值