选择排序,冒泡排序,插入排序

一、选择排序
选择排序就是找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小者。
在这里插入图片描述

//比值交换
public void swap(int[] arr, int i,int j){
        int temp = arr[j];
        arr[j] = arr[i];
        arr[i] = temp;
    }
 public int[] selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return null;
        }
       
            //0~n-1 范围进行排序 确定第0位为最小值
            //1~n-1 范围排序 确定第1位
            //...
            //n~n-1 范围 确定第n位
        for (int minIndex, i = 0; i < arr.length; i++) {
            //minIndex:i~n-1范围内最小的值
            //先假定第一个数为最小值
            minIndex = i;
            //i+1,i+2,...,i+10,...
            //i+10,位置上的数小于i+1 位置交换 minIndex = j;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[minIndex] > arr[j]) {
                    minIndex = j;
                }
            }
           swap(arr,i,minIndex);
        }
        return arr;
    }

二、冒泡排序
冒泡排序就是将最大的值交换到最右边,先确定整个数组的终点,从左往右依次比值排序,将最大值排到最右侧。
在这里插入图片描述

//比值交换
public void swap(int[] arr, int i,int j){
        int temp = arr[j];
        arr[j] = arr[i];
        arr[i] = temp;
    }
        //冒泡排序
    public static int[] bubbleSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return null;
        }
		//确定数组每次循环的终点
		//0~n-1 范围 谁大谁往后 依次交换 确定第n-1位
        	//0~n-2 范围 确定第n-2位
        	//...
        	//0~1 范围 确定第1位
        for(int end = arr.length - 1; end > 0; end--){
        	//从0位开始交换冒泡
            for (int i = 0; i < end; i++) {
                if(arr[i]>arr[i+1]){
                    swap(arr,i,i+1);
                }
            }
        }
        return arr;

    }

三、插入排序
通常人们整理牌的方法是一张一张的来,将每一张牌插人到其他已经有序的牌中的适当位置。在计算机的实现中,为了给要插人的元素腾出空间,我们需要将其余所有元素在插人之前都向右移动一位。这种算法叫做插入排序
在这里插入图片描述

//比值交换
public void swap(int[] arr, int i,int j){
        int temp = arr[j];
        arr[j] = arr[i];
        arr[i] = temp;
    }
   //插入排序
    public static int[] insertSort(int[] arr) {
        if(arr == null || arr.length < 2){
            return null;
        }
        //从第2个元素开始排序
        //第一个元素不能比值
        for(int i = 1; i < arr.length; i++){
            //从当前元素左边第一个元素开始,向左找位置//
        	//0~1 第一个元素和第二个元素比值,如果第一个元素大于第二个元素 插入到前面结束这一轮
        	//0~2 第三个元素j+1依次与第二个元素j比较,如果第二个大于第三个元素交换,j-- 然后与第一个元素进行比较。
        	//...
        	//0~n-1
            for(int j = i-1;j>=0 && arr[j]>arr[j+1];j--){
                swap(arr,j,j+1);
            }
        }
        return arr;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值